gpt4 book ai didi

perl - 修改$_的时候会出错吗?

转载 作者:行者123 更新时间:2023-12-03 03:51:01 28 4
gpt4 key购买 nike

以下代码何时可能产生副作用?

@some = map { s/xxx/y/; $_ } @some;

perlcritic 将其解释为危险的,因为例如:

@other = map { s/xxx/y/; $_ } @some;

并且@some的成员被修改。理解。我有 BPB 书,它通过示例显示了上面的内容

@pm_files_without_pl_files
= grep { s/.pm\z/.pl/xms && !-e } @pm_files;

我还阅读了“列表处理副作用”/“永远不要修改列表函数中的 $_”一章。及其追随者。我也知道 /r

要明确的是(我糟糕的英语尽可能多):

在第一个示例中,要点是修改原始的@some

问题是:

  • 第一个例子可以吗 @some = map { s/xxx/y/; $_ } @some; 导致一些不需要的副作用?如果是,什么时候?
  • 或者这只是“不推荐”的方式(但无害否则)?

正在寻找一个比某些“perl 初学者书籍”更深入的答案 - 因此仍然不接受任何当前的答案。 ;)

最佳答案

Perl 的座右铭之一一直是 TIMTOWTDI:有不止一种方法可以做到这一点。如果两种方法的最终结果相同,则它们同样正确。这并不意味着没有理由选择其中一种方式而不是另一种方式。

在第一种情况下,做类似的事情会更明显(对我来说,YMMV)

s/xxx/y/ for @some;

这主要是因为它的沟通意图更好。 for 表明它与副作用有关,而 map 表明它与返回值有关。虽然功能相同,但对于您的程序员同事来说(可能对于 6 个月后的您自己来说)应该更容易理解。

方法不止一种,但有些方法比其他方法更好。

关于perl - 修改$_的时候会出错吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31924812/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com