1
A
回答
1
試試這個:
my @array = qw(1 2 3 4);
print "@array\n";
my @new_array = map ++$_, @array;
print "@new_array\n";
print "@array\n"; # oops, we modified this in-place
grep
是相似的。爲sort
,所述$a
和$b
變量是別名回到原來的陣列,因此也可用於對其進行修改。其結果是有些無法預測,這取決於排序算法Perl是使用(在不同版本的Perl在歷史上發生變化,雖然一直沒有在一段時間改變)。
my @arr = qw(1 2 3 4 5);
my @new = sort { ++$a } @arr;
print "@arr\n";
do
和eval
可以採取任意代碼塊,這樣可以明顯修改任何非只讀變量,雖然目前還不清楚這是否算作到位修改輸入。斯萊德的示例使用eval
的連續形式應該可以算。
+0
所以他的測試是有缺陷的。沒有選項說明'以上所有'。 – 2014-09-06 07:57:13
1
我假設問題是測試以確定學生是否知道如何正確使用返回值sort
,map
等等,而不是在無效環境中使用它們並期望產生副作用。不過,完全可以修改給定的參數。
map
和grep
別名$_
每個元素,所以修改$_
將改變變量的值傳遞給它的列表(假定他們不是常量或文字)。
eval EXPR
和do EXPR
可以做任何事情,或多或少,所以並沒有什麼東西做這樣的事情阻止你:
my $code = q($code = 'modified');
eval $code;
say $code;
的參數do BLOCK
和eval BLOCK
總是代碼文字塊,這是不以任何我知道的方式有效的左值。
sort
有當叫像@array = sort { $a <=> $b } @array;
了特別的優化。如果你看看這個爲B產生的操作碼::簡潔,你會看到類似這樣的:
9 <@> sort lK/INPLACE,NUM
但關於語言的語義問題,實現細節是無關緊要的。
相關問題
- 1. Python中的'就地'字符串修改
- 2. Python的就地布爾運算符
- 3. python字符串就地修改
- 4. data.table就地修改R
- 5. LXML:修改樹就地
- 6. 使用Perl的鑽石和就地編輯運算符就地編輯目錄中的多個文件
- 7. 用原型修改陣列就地
- 8. Perl匹配運算符=〜
- 9. Perl模運算符問題
- 10. perl中'++'運算符的行爲
- 11. + =運算符似乎修改了凍結字符串
- 12. Rails 3.1就地修改:可以運行的寶石,還是自己滾動?
- 13. 如何修改OCaml中的一元運算符?
- 14. perl的就地在文本文件中
- 15. Perl小於'<'運算符問題
- 16. Perl三元條件運算符
- 17. perl - 通用運算符過載
- 18. perl文件測試運算符和「$ _」
- 19. Perl等效於(Postgre)SQL BETWEEN運算符?
- 20. - >運算符在Perl中做什麼?
- 21. ^=運算符在Perl中做什麼?
- 22. 我可以使用Perl中的smartmatch運算符替換綁定運算符嗎?
- 23. 如何修改我的Shunting-Yard算法以便接受一元運算符?
- 24. 如何使用lambda運算符修改此linq查詢?
- 25. 修改字符串的最後兩個字符在Perl
- 26. 用Perl就地編輯YAML文檔
- 27. 使用simple_format以某種方式修改模型屬性就地
- 28. Perl比較運算符和字符串化的「數字」
- 29. []運算符的運算符過載
- 30. 位運算符給我的地獄
,你能否告訴到位修改一些例子嗎? https://eval.in/189209 – 2014-09-06 06:40:01
感謝斯萊德和tobyink! mpapec請參考下面的答案。 – prefetcher 2014-09-06 09:48:53
檢查我上面的鏈接。 – 2014-09-06 09:52:23