Perl-Can调用方法" next"在未定义的值上

时间:2017-04-27 14:34:40

标签: perl

有谁知道如何解决这个问题?我在运行时不断获得此解决方案: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";
    }
}

1 个答案:

答案 0 :(得分:5)

该错误意味着失败:

while (my $file = $dir->next) 

由于您在未定义的值上调用next而导致$dir

dir总是返回一个对象,除非它传递一个参数,并且该参数未定义。在那种情况下,仅在那种情况下,它返回undef [1] 。这表示$ARGV[0]未定义,这表示没有参数传递给脚本,而需要一个参数。

  1. 如果没有这种特殊情况,dir(undef)将被解释为dir(''),它返回根目录,这将是处理错误输入的危险方式!