在Perl中等同字符串变量?

时间:2013-05-08 05:41:15

标签: perl

我创建了一个Perl脚本,用于从相对路径中提取文件名。 这是一个sub,它将路径作为参数,然后从中计算名称,然后将其附加到全局变量。

my $all_names = "";
sub check_line
{
    my @args = @_;
    my $line = $args[0]; #take the path
    my @paths = split(/\\|\//, $line); #split according to folder
    my $last = @paths;
    $last = $last - 1;
    my $name = $paths[$last]; #take the file name
    chomp($name); #remove \n character from end of string
    my ($ext) = $name =~ /(\..+)/; #extract the file extension from file name
    if(($ext eq ".h") || ($ext eq ".cpp") || ($ext eq ".c")) #filter the required files
    {
         $all_names = $all_names . "$name "; #append the file names to global variable
    }
}

现在这个脚本在Perl 5.005中工作正常(是的,我们也有旧版本的Perl!)。 但是,如果我在Perl 5.10上运行它,它将无法正常运行。 检查文件扩展名始终返回false。 即使我打印文件扩展名,我也会正确地将其.h.c,但即使我单独进行比较

if($ext eq ".c")

然后它返回false。 这可能有什么问题? 谢谢。

1 个答案:

答案 0 :(得分:2)

这不是因为版本的变化。

你可能有一个带有CR LF结尾的文件,而你正在非Windows机器上运行。

您可以使用dos2unix或类似内容修复行结尾。

或者,您可以更改

chomp($name);

$name =~ s/\r?\n\z//;

或更好

$name =~ s/\s+\z//;