perl - 在 Perl 中取消引用字符串

标签 perl

我在 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/

相关文章:

python - 如何从以色列统计局网络查询工具中抓取数据?

perl - 所有引用都以标量形式存在吗?甚至是明确的?

python - 从指定字节偏移量的文件中获取行

perl - 如何从 Perl 创建或读取 OpenOffice 电子表格?

mysql - Perl DBI/Mysql Unicode 错误

perl - 带内联的子程序 perl

perl - 为什么 Win32::TieRegistry 不能列出子项?

perl - Moose && utf8(包|方法)名称

regex - 如何在 Perl 中提取以子字符串开头的字符串的其余部分?

perl - 使用 Perl,如何跟踪常量被重新定义的位置?