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