【发布时间】:2013-05-08 13:55:58
【问题描述】:
我创建了一个 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。 这里可能有什么问题? 谢谢。
【问题讨论】:
-
如果您打印
length($ext),是否为.c打印2? -
@Andomar 不,它的打印 3. 为什么会这样?不应该 chomp 删除所有这些\n。 \r 字符?
标签: perl