我在 Perl sub findfiles 中有一个子例程,我必须传递一个带引号的值 "*/*" 作为输入参数,因为它没有引用就提示,另一方面在我的子例程中我需要它不加引号(可能是!)问题是当我打印要检查的值时,我没有看到任何引号或任何东西,但可能有一些特殊的隐藏字符或我不知道的东西?当我直接使用 */* 但当我将它作为输入参数传递时,我的代码可以正常工作 你有什么想法吗?
sub findfiles {
$dirname=$_[0];
my @temp = grep {-f} <$dirname>;
print @temp;
}
&findfiles("*/*"); doesnot work
but
sub findfiles {
$dirname=$_[0];
my @temp = grep {-f} <*/*>;
print @temp;
}
做它的工作
最佳答案
根据您更新后的代码,我可以看出您的错误所在。而
my @temp = grep {-f} <*/*>;
作为一个 glob
my @temp = grep {-f} <$dirname>;
被解释为 readline()在文件句柄 $dirname
上。
如果您想避免歧义,您可以使用 glob
的函数:
my @temp = grep -f, glob $dirname;
您可能还对使用 File::Find 感兴趣, 它以递归方式查找文件。
注意:如果您打开了警告,这个问题是可以避免的。根据经验,在不使用 perl 的情况下编写代码
use strict;
use warnings;
...这是一个非常糟糕的主意。这两个 pragma 将帮助您识别代码中的问题。
关于perl - 在 Perl 中取消引用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041465/