为什么我从readdir获取一个数字而不是一个文件名列表?

Sen*_*mar 1 directory perl

我有一段用于searchnig目录的Perl代码,如果找到匹配则显示该目录的内容.代码如下:

$test_case_directory = "/home/sait11/Desktop/SaLT/Data_Base/Test_Case";
$xml_file_name = "sample.xml"

$file_search_return = file_search($xml_file_name);
print "file search return::$file_search_return\n";


sub file_search
{
    opendir (DIR, $test_case_directory) or die "\n\tFailed to open directory that contains the test case xml files\n\n";

    print "xml_file_name in sub routines:: $xml_file_name\n";

    $dirs_found = grep { /^$xml_file_name/i } readdir DIR;
    print "Files in the directory are dirs_found :: $dirs_found\n";
    closedir (DIR);
    return $dirs_found;
}
Run Code Online (Sandbox Code Playgroud)

输出是,

xml_file_name in sub routines:: sample.xml
Files in the directory are dirs_found :: 1
file search return::1
Run Code Online (Sandbox Code Playgroud)

它没有返回找到的文件名.相反,它总是返回数字1.

我不知道为什么它没有返回sample.xml目录中名为present 的文件名.

n0r*_*0rd 8

perldoc grep说:

在标量上下文中,返回表达式为true的次数.

而这正是你在做的事情.所以你找到了1个文件,结果被分配给$dirs_found变量.