初学者问题 - Perl脚本找不到文件

时间:2011-01-12 03:57:28

标签: perl

我是Perl的新手,并创建了一个简单的Perl程序。但是,它似乎永远不会在文件系统上找到文件。代码是:

my $filename = 'test.txt';
if (-e $filename)
{
   print "exists";
}
else
{
   print "not found";
}

我还尝试使用文件“test.txt”的确切路径,但它仍然不起作用;它永远不会找到该文件。有人知道我做错了什么吗?

4 个答案:

答案 0 :(得分:3)

您的代码似乎是正确的,这意味着“test.txt”确实不存在(或者如果存在,则它不在工作目录中)。

例如,如果你有这个:

/home/you/code/test.pl
/home/you/test.txt

运行你的代码:

$ cd code
$ perl test.pl

然后找不到您的测试文件。

在执行任何操作之前,让脚本打印当前工作目录可能会有所帮助:

use Cwd;
print getcwd();

... 

答案 1 :(得分:0)

写下文件的完整路径。它应该工作。例如:

folder/files/file.txt

并且可能使用"而不是'

答案 2 :(得分:0)

以下是可能出错的可能性:

  1. 关于完整路径:您正在使用Windows,只是将完整路径复制到您的字符串中。在这种情况下,不要忘记逃离路径中的退格。例如:C:\myFolder\test.txt必须像这样放入变量:my $filename = "C:\\myFolder\\test.txt"
  2. 您的脚本使用的目录不是您的文件所在的目录。以下是您如何找到脚本执行位置以及查找相对文件路径的位置test.txt:< / p>

    use strict;
    use Cwd;
    print getcwd;
    

    如果您在错误的文件路径中,则必须在执行脚本之前切换到正确的文件路径。请使用shell命令cd

  3. 您位于正确的目录中和/或正在使用正确的完整路径,但该文件具有其他名称。您可以使用perl来查找实际名称。在执行此脚本之前,请转到文件所在的目录:

    use strict;
    opendir my $dirh, '.';
    print "'", join ("'\n'", grep $_ ne '.' && $_ ne '..', readdir $dirh), "'\n";
    closedir $dirh;
    

    以单引号打印当前目录中的所有文件。从文件中复制文件名并在代码中使用它。

  4. 祝你好运! :)

答案 3 :(得分:-2)

使用此脚本:

my $filename=glob('*.txt');
print $filename;
if (-e $filename)
{
    print "exists";
}
else
{
    print "not found";
}