File Perl用户输入文件搜索

File Perl用户输入文件搜索,file,perl,io,File,Perl,Io,我目前正在尝试接受用户输入的文件名,然后搜索该文件。如果找不到程序,程序必须正常终止,如果找到,则继续。从我的研究中发现,由于某种原因,“-e”函数对我不起作用。我在mac电脑上,如果这有什么不同的话,尽管我有沙邦 #!/usr/bin/perl use strict; print "Enter the name of a file: "; my $userInput = <STDIN>; my $fileName = '/' . $userInput; if(-e $fil

我目前正在尝试接受用户输入的文件名,然后搜索该文件。如果找不到程序,程序必须正常终止,如果找到,则继续。从我的研究中发现,由于某种原因,“-e”函数对我不起作用。我在mac电脑上,如果这有什么不同的话,尽管我有沙邦

#!/usr/bin/perl

use strict;


print "Enter the name of a file: ";
my $userInput = <STDIN>;
my $fileName = '/' . $userInput;

if(-e $fileName) {
  print "File exist.\n";
  die();
} else {
  print "File doesnt exist.\n";
  die();
}
#/usr/bin/perl
严格使用;
打印“输入文件名:”;
我的$userInput=;
我的$fileName='/'$用户输入;
如果(-e$fileName){
打印“文件存在。\n”;
模具();
}否则{
打印“文件不存在。\n”;
模具();
}

如果文件名正确与否,则永远不会找到该文件。

问题是,当您按enter键时,也会将换行符作为文件名的一部分。您可以注意到,如果打印
$filename

您可以在获得输入后使用
chomp
函数将其删除:

chomp($userInput)

另外,我不确定您是否真的要检查根目录或当前目录中的文件。如果它在当前位置,则可能在斜线前遗漏了一个点:
“./”$用户输入

通过这两个更改,您的代码应该如下所示:

#!/usr/bin/perl

use strict;


print "Enter the name of a file: ";
my $userInput = <STDIN>;
chomp($userInput);
my $fileName = './' . $userInput;

if(-e $fileName) {
  print "File '$fileName' exist.\n";
  die();
} else {
  print "File '$fileName' doesnt exist.\n";
  die();
}
#/usr/bin/perl
严格使用;
打印“输入文件名:”;
我的$userInput=;
chomp($userInput);
我的$fileName='./'$用户输入;
如果(-e$fileName){
打印“存在文件“$fileName”。\n”;
模具();
}否则{
打印“文件“$fileName”不存在。\n”;
模具();
}

问题在于,当您按enter键时,您也会将换行符作为文件名的一部分。您可以注意到,如果打印
$filename

您可以在获得输入后使用
chomp
函数将其删除:

chomp($userInput)

另外,我不确定您是否真的要检查根目录或当前目录中的文件。如果它在当前位置,则可能在斜线前遗漏了一个点:
“./”$用户输入

通过这两个更改,您的代码应该如下所示:

#!/usr/bin/perl

use strict;


print "Enter the name of a file: ";
my $userInput = <STDIN>;
chomp($userInput);
my $fileName = './' . $userInput;

if(-e $fileName) {
  print "File '$fileName' exist.\n";
  die();
} else {
  print "File '$fileName' doesnt exist.\n";
  die();
}
#/usr/bin/perl
严格使用;
打印“输入文件名:”;
我的$userInput=;
chomp($userInput);
我的$fileName='./'$用户输入;
如果(-e$fileName){
打印“存在文件“$fileName”。\n”;
模具();
}否则{
打印“文件“$fileName”不存在。\n”;
模具();
}

我添加了一行my$fileName='./'.chomp($userInput);但是当我执行-e部分时,它仍然会进入if语句的else部分,这是不同的,因为您在附加chomp函数返回值。在获得用户输入后,立即将我提到的代码添加为新行。您可以使打印语句显示文件名,以便更清楚地显示正在发生的情况
print“file'$fileName'不存在。\n”例如,右。我想说的是,您可以删除该代码,然后执行
my$fileName=$userInput
(或者去掉额外的变量)。@motherloadmining您可以在同一语句中执行它:
chomp(my$userInput=readline STDIN)我添加了一行my$fileName='./'.chomp($userInput);但是当我执行-e部分时,它仍然会进入if语句的else部分,这是不同的,因为您在附加chomp函数返回值。在获得用户输入后,立即将我提到的代码添加为新行。您可以使打印语句显示文件名,以便更清楚地显示正在发生的情况
print“file'$fileName'不存在。\n”例如,右。我想说的是,您可以删除该代码,然后执行
my$fileName=$userInput
(或者去掉额外的变量)。@motherloadmining您可以在同一语句中执行它:
chomp(my$userInput=readline STDIN)