打印变量和"全局符号$ XXX需要显式包"

时间:2016-06-29 02:37:11

标签: perl global-variables packages

我有以下Perl。它试图检测Git Clone(而不是脱机zip)并打印repo信息。这个想法是,如果git rev-parse失败,那么它可能不是Git回购。

if (system "git rev-parse HEAD") {                         # Line 234
    my $revision = `git rev-parse HEAD | cut 1-16`;        # Line 235
    my $branch = `git rev-parse --abbrev-ref HEAD`;        # Line 236
    print "Git repo: $branch ($revision)\n";               # Line 237
}                                                          # Line 238

导致以下错误。如果我正确解析What's the differences between system and backticks and pipes in PerlHow can I store the result of a system command in a Perl variable,它应该可以正常工作。

根据How to print variables in Perlprint "Git repo: $branch ($revision)\n"应该有效。根据{{​​3}},Q& A表示使用@代替$。我尝试print "Git repo: @branch (@revision)\n",但导致了相同的错误(使用不同的符号)。

我有两个问题:

  • 为什么Perl认为变量是一个包?

  • Perl有什么问题,我该如何解决?

Global symbol "@branch" requires explicit package name at ./Configure line 237.
Global symbol "@revision" requires explicit package name at ./Configure line 237.

1 个答案:

答案 0 :(得分:0)

我无法测试你的脚本,但这部分应该是这样的:

if(`git rev-parse HEAD 2>&1` !~ /Not a git repository/) {
    chomp(my $revision = `git rev-parse HEAD | cut -c1-16`); 
    chomp(my $branch = `git rev-parse --abbrev-ref HEAD`);
    print "Git repo: $branch ($revision)\n";
}