我想編寫一個Perl子程序first
,它將列表作爲輸入,返回列表中的第一個元素並從列表中刪除第一個元素。修改子程序參數(Perl)
像這樣:
@list = (1,2,3);
print first(@list); // 1
print @list; // 23
這是不大的工作:
sub first(@) {
return shift @_;
}
我得到的是:
print first(@list); // 1
print @list; // 123
堆棧變量@_改變我希望它的方式(首先它是(1, 2, 3)
然後它是(2, 3)
),但我給出的列表作爲輸入(@list
)沒有改變。我認爲堆棧變量保存對其引用的變量的引用。
當我在子程序更改列表元素,也改變@list
的東西,但不是我想的,但一個+ 1,所以,如果我在子程序我寫:
@_[0] = "X";
並執行子程序打印@list
後,我會得到2X6
。
爲什麼不使用'shift'來實現呢? –
這就是我在子程序 – d9h
中所做的,但是您爲什麼要編寫子程序?當你可以簡單地使用'shift'? –