gpt4 book ai didi

perl - 嵌套子例程中的 File::Find 和 $_

转载 作者:行者123 更新时间:2023-12-02 00:24:27 27 4
gpt4 key购买 nike

运行以下代码时,将打印 C:\Test 下面的所有文件的文件名。为什么它不只打印 Hello (n 次,取决于处理的文件数量)?

这是否意味着我不能依赖 shift 可靠地分配给 $_?想象一下,一位同事实现了 wtf 函数,但不知道它是从 File::Find wanted 子函数调用的。我使用 Strawberry Perl 5.12 运行此代码

编辑:此代码也没有按预期运行:

use strict;
use warnings;

wanted();

sub wanted{
wtf("Hello");
}

sub wtf {
shift;
print; #expecting Hello
}

所以我想我完全脱离了高速公路。这显然与 File::Find 无关,我现在正在为这个问题寻找一个新标题。这是我的原始代码:

use strict;
use warnings;

use File::Find;

find(\&wanted, "C:\\test");

sub wanted{
wtf("Hello");
}

sub wtf {
shift;
print; #expecting Hello
}

最佳答案

print 默认打印 $_,但 shift 默认打印 @_。如果您想将参数传递给子例程,则应该使用 @_,而不是 $_shift 返回移位后的值,因此您应该执行以下操作:

sub wtf {
my $_ = shift;
print;
}

问题是您的 $_ 变量设置为文件名,但 @_ 设置为参数。 CPAN documentation for File::Find 详细解释了这一点。

关于perl - 嵌套子例程中的 File::Find 和 $_,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2956339/

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