在Perl中取消引用字符串

sha*_*haq 2 perl

我在Perl子查找文件中有一个子程序,我必须传递一个引用值"*/*"作为输入参数,因为它没有引用而抱怨,另一方面在我的子程序中我需要它不加引号(可能是!)问题是我打印值检查,我没有看到任何引用,或任何事情,但可能有一些特殊的隐藏字符或我不知道的东西?当我直接使用*/*时,我的代码正常工作,但是当我将它作为输入参数传递时,我的代码是否正常你有什么想法?

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;       

}
Run Code Online (Sandbox Code Playgroud)

做它的工作

TLP*_*TLP 8

使用更新的代码,我可以看到您的错误所在.而

my @temp = grep {-f} <*/*>;
Run Code Online (Sandbox Code Playgroud)

作为一个 glob

my @temp = grep {-f} <$dirname>;
Run Code Online (Sandbox Code Playgroud)

被解释为文件句柄上的readline()$dirname.

如果您想避免歧义,可以使用以下函数glob:

my @temp = grep -f, glob $dirname;
Run Code Online (Sandbox Code Playgroud)

您可能还有兴趣使用File :: Find,它以递归方式查找文件.

注意:如果您已打开警告,则可以避免此问题.根据经验,在perl中编码而不使用

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

......是一个非常糟糕的主意.这两个pragma将帮助您识别代码问题.