有谁知道如何解决这个问题?我在运行时不断获得此解决方案:Can't call method "next" on an undefined value at /Users/myname/Documents/TextWranglerRunTemp-renamer11.pl line 12
。
这是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use Path::Class;
my $dir = dir( $ARGV[0] );
# Iterate over the content of the directory
while ( my $file = $dir->next ) {
if ( $file->is_dir() ) {
print "Is a directory\n";
}
else {
my @split = split /.([^.]+)$/, $file;
if ( $split[1] eq "pl" || "docx" ) {
rename( $file, $split[0] . ".perl" ) || die( "Error in renaming" );
}
print "Before " . $file . "\n";
#rename($file, $file.".abc") || die ( "Error in renaming" );
# Print out the file name and path
print "After " . $file . "\n";
#print $file->stringify . "\n";
}
}
答案 0 :(得分:5)
该错误意味着失败:
while (my $file = $dir->next)
由于您在未定义的值上调用next
而导致$dir
。
dir
总是返回一个对象,除非它传递一个参数,并且该参数未定义。在那种情况下,仅在那种情况下,它返回undef
[1] 。这表示$ARGV[0]
未定义,这表示没有参数传递给脚本,而需要一个参数。
dir(undef)
将被解释为dir('')
,它返回根目录,这将是处理错误输入的危险方式!