我有以下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 Perl和How can I store the result of a system command in a Perl variable,它应该可以正常工作。
根据How to print variables in Perl,print "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.
答案 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";
}