我是Perl的新手。
我正在尝试检查现有变量$file_path
是否等于if
条件下的特定路径。
my $PRODPATH = '/path/to/prod';
if ( $file_path eq "$PRODPATH/specific/path/to/file" ) {
print "File is same as earlier \n\n";
}
else {
print "File is not same as earlier \n\n";
}
但由于字符串中的特殊字符$
与$file_path
进行比较,因此流程不会出现任何条件。
路径中的斜杠/
是否也会产生任何问题?
答案 0 :(得分:2)
由于字符串
中的特殊字符$,流不会进入任何条件
这是一个错误的诊断,我不明白你是如何得到这个想法的。像$PRODPATH
这样的Perl变量在双引号字符串中展开,但是如果将 Perl 变量$PRODPATH
设置为与环境变量相同的值,那么您的代码应该可以工作
您可以通过Perl的%ENV
哈希访问环境变量,因此您应该删除$PRODPATH
的定义并编写
if ( $file_path eq "$ENV{PRODPATH}/specific/path/to/file" ) { ... }
此外,必须始终 use strict
和use warnings 'all'
位于您编写的每个Perl程序的顶部。
如果您仍然遇到问题,请将其添加到您的代码中并显示结果
use Data::Dumper;
print Dumper [ $file_path, $ENV{PRODPATH} ];
答案 1 :(得分:0)
在双引号中,变量被内插(扩展)。
这样可行:
#!/usr/bin/env perl
use strict;
use warnings;
my $file_path = '/path/to/prod/specific/path/to/file';
my $PRODPATH = '/path/to/prod';
if ( $file_path eq "$PRODPATH/specific/path/to/file" )
{
print "File is same as earlier \n\n";
}
else
{
print "File is not same as earlier \n\n";
}
如果$file_path
不是字面上相同的文字字符串,那么它就不会胜利。特别是 - 如果路径包含额外(或尾随)斜线,或者它是相对路径,或者它是一个符号链接 - 该比较不会起作用。