在简单的代码中令人困惑的“在void上下文中无用的常量”

时间:2014-04-23 22:05:14

标签: perl bash warnings

我在Bash脚本中执行一个小的Perl脚本。 Perl报告在-e第28行的void上下文中无用的常量,在结束Perl代码后

Bash摘录:

#
# Perl script to parse album list file
#
PERLSCRIPT=$( cat <<-'__END__'

    #!/usr/bin/perl
    use strict;
    use warnings;
    use XML::Simple;


    my $albums_file      = $ARGV[0];
    my $album_id         = $ARGV[1];

    my $albums_data = XMLin ( $albums_file,
                              forcearray => [ 'Album' ] );
    my $album_key   = "";

    foreach my $album ( keys %{$albums_data->{Albums}->{Album}} )
    {
        if ( $album == $album_id )
        {
            $album_key = $albums_data->{Albums}->{Album}
                                           ->{$album}->{Key};
            print "$album_key\n";
            exit 0;
        }
    }

    exit 1;

'__END__' )


say "$LINENO: Calling perl"
ALBUM_KEY=$(perl -e "$PERLSCRIPT" "$ALBUMS_FILE" "$ALBUM_ID")

执行时,我看到以下内容:

    454: Calling perl
    Useless use of a constant in void context at -e line 28.

Perl在抱怨什么?

1 个答案:

答案 0 :(得分:4)

我认为它指的是'__END__'行。 bash的<<-'TOKEN' heredoc表示法不需要单引号。

$ perl -w <<-'__END__'
> print "hello world\n";
> '__END__'
> __END__
Useless use of a constant (__END__) in void context at - line 2.
hello world

$ perl -w <<-'__END__'
> print "hello world\n";
> __END__
hello world