我的if-perl语句有什么问题?

我的if-perl语句有什么问题?,perl,if-statement,Perl,If Statement,好吧,这让我发疯了 看了很多例子,阅读了perl中的if语句,我觉得一切都是正确的,那么其他人能发现错误吗 #Start of script #!/usr/bin/perl -w ########################## #### Define Variables #### ########################## echo $PWD; mainDirectory=$ENV{HOME}"/test/"; file='report.txt'; backupDirector

好吧,这让我发疯了

看了很多例子,阅读了perl中的if语句,我觉得一切都是正确的,那么其他人能发现错误吗

#Start of script
#!/usr/bin/perl -w

##########################
#### Define Variables ####
##########################
echo $PWD;
mainDirectory=$ENV{HOME}"/test/";
file='report.txt';
backupDirectory=$ENV{HOME}"/test/backup";
number_to_try=0;

##################################
#### Check if the file exists ####
################################## 
filename=$mainDirectory$file;
echo $filename;

if (-e $filename) {
    print "File Exists!"
}
我收到的错误消息是:

./perl.pl: line 18: syntax error near unexpected token `{'
./perl.pl: line 18: `if (-e $filename) {'

有人有什么想法吗?

用最小的改动重写:

#!/usr/bin/perl -w

##########################
#### Define Variables ####
##########################

#echo $PWD;
$mainDirectory=$ENV{HOME}."/test/";
$file='report.txt';
$backupDirectory=$ENV{HOME}."/test/backup";
$number_to_try=0;

##################################
#### Check if the file exists ####
################################## 
$filename=$mainDirectory.$file;
#echo $filename;

if (-e $filename) {
    print "File Exists!"
}
强烈建议使用
严格使用
使用警告虽然。

上面的所有“if”行都是无效的Perl;我相信你想做:

#!/usr/bin/perl
use strict;
use warnings;

##########################
#### Define Variables ####
##########################

my $mainDirectory = "$ENV{HOME}/test";
my $file = 'report.txt';
my $backupDirectory = "$ENV{HOME}/test/backup";
my $number_to_try = 0;

##################################
#### Check if the file exists ####
##################################

my $filename = "$mainDirectory/$file";
print "$filename\n";

if (-e $filename) {
        print "File Exists!\n";
}

您可能需要阅读更多关于Perl基础知识的教程,尤其是语法

标量变量的前缀应为
$

连接字符串时

什么是
$PWD


什么是回声

这个perl怎么样?这是一个perl脚本,我正在启动…#/usr/bin/perl。。怎么不是呢?这主要是用
sh
编写的,除了结尾的条件和
%ENV
散列之外。使用错误的shebang并不能神奇地解决这个问题。Perl没有回声。变量的赋值方式类似于
$foo=“$ENV{HOME}/test/”
(注意LHS上的sigil)您有大量没有sigil的变量(小的$or@marker),而且您似乎混合了php和perl函数以及语法。您应该会收到更多的错误消息。其中大部分看起来像是有效的sh/bash语法,而不是有效的Perl语法。Perl没有内置的
echo
命令。如果
mainDirectory
应该是一个变量,那么它必须是
$mainDirectory
$ENV{HOME}/“test/”
应该是
“$ENV{HOME}/test/”
。等等。
print“File Exists!”
?@rutter块中的尾随分号是可选的:
{foo()}
{foo();;}
相同,如果不使用
使用strict
:)啊哈,对了。我比编译器更挑剔的少数情况之一@amon尽管在块中尾随分号是可选的,但我发现如果在(阻塞结束)语句的末尾总是有分号,那么在添加额外的行时出错的可能性要小得多;使用警告被认为比
-w。。。严格使用
@KeithThompson我同意,“使用警告”仅用于此文件比在程序范围内使用“-w”要好得多,并且可能会干扰您使用的任何模块。(当我可以的时候,我通常会把“-w”去掉。)谢谢你的精彩回复,同时也从这一切中学到了一些新的东西。。。shebang必须在第一行。。或者它只会将其解释为sh。感谢您的建设性意见:)