【问题标题】:Baffling "Useless use of a constant in void context" in simple code简单代码中令人费解的“在无效上下文中无用地使用常量”
【发布时间】:2014-06-08 23:34:52
【问题描述】:

我正在 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 抱怨什么?

【问题讨论】:

  • 为什么不将 Perl 源代码放在一个单独的文件中并调用它呢?
  • 显然是指你的'__END__'令牌。
  • 为了回答 squiguy,我想创建一个尽可能独立的 Bash 脚本。我希望其他人能够下载它并让它正常工作,而不需要在路径中安装多个单独的文件并使其可执行。

标签: perl bash warnings


【解决方案1】:

我相信它指的是'__END__'。 bash 的 &lt;&lt;-'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

【讨论】:

猜你喜欢
  • 2014-02-22
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2012-09-03
相关资源
最近更新 更多