Perl:如果其中一个字符串带有特殊字符

时间:2017-04-28 09:55:36

标签: string perl if-statement special-characters filepath

我是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进行比较,因此流程不会出现任何条件。

路径中的斜杠/是否也会产生任何问题?

2 个答案:

答案 0 :(得分:2)

  

由于字符串

中的特殊字符$,流不会进入任何条件

这是一个错误的诊断,我不明白你是如何得到这个想法的。像$PRODPATH这样的Perl变量在双引号字符串中展开,但是如果将 Perl 变量$PRODPATH设置为与环境变量相同的值,那么您的代码应该可以工作

您可以通过Perl的%ENV哈希访问环境变量,因此您应该删除$PRODPATH的定义并编写

if ( $file_path eq "$ENV{PRODPATH}/specific/path/to/file" ) { ... }

此外,必须始终 use strictuse 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不是字面上相同的文字字符串,那么它就不会胜利。特别是 - 如果路径包含额外(或尾随)斜线,或者它是相对路径,或者它是一个符号链接 - 该比较不会起作用。