Perl 打印变量和“;全局符号$XXX需要明确的包“;
我有下面的Perl。它尝试检测Git克隆(与脱机zip相反)并打印回购信息。想法是,如果Perl 打印变量和“;全局符号$XXX需要明确的包“;,perl,global-variables,packages,Perl,Global Variables,Packages,我有下面的Perl。它尝试检测Git克隆(与脱机zip相反)并打印回购信息。想法是,如果git rev parse失败,那么它可能不是git repo if (system "git rev-parse HEAD") { # Line 234 my $revision = `git rev-parse HEAD | cut 1-16`; # Line 235 my $branch = `git rev-parse --
git rev parse
失败,那么它可能不是git repo
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
它会导致以下错误。如果我正在解析并且正确,它应该可以工作
根据,print“Git repo:$branch($revision)\n”
应该可以工作。基于此,Q&A建议使用@
而不是$
。我试图打印“Git repo:@branch(@revision)\n”
,但它导致了相同的错误(使用不同的符号)
我有两个问题:
- 为什么Perl认为变量是一个包
- Perl有什么问题,如何修复
全局符号“@branch”需要在./Configure行237处显示包名。
全局符号“@revision”要求在./Configure第237行显示包名。
我无法测试您的脚本,但这部分应该是这样的:
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";
}
系统在成功时返回0
。因此,如果进入if
块,则表示命令(本身)git rev parse HEAD
失败。然后在qx
(倒勾)中也会发生同样的情况。我怀疑这不是你想要的?至于你所犯的错误,我不知道。这意味着没有声明变量$branch
,这很奇怪。您能否将代码简化为一个简短、可运行的程序来演示这个问题?使用问题中发布的代码(由于@zdim已经解释的原因,if
中的逻辑颠倒),我无法重现您描述的错误。除了文本格式不好(在$branch
和$revision
结尾的换行符)之外,它对我来说非常适合。@zdim-谢谢。由于全局符号错误,我并没有走到那个么远(但我怀疑它)。我真诚地怀疑代码是否给出了那个些错误。错误抱怨您使用了两个未知数组变量@branch
和@revision
,而您发布的代码中没有此类数组变量。更可能的是,错误地生成这些错误的实际代码在第237行中有@branch
和@revision
(或者类似$branch[0]
和$revision[0]
)而不是$branch
和$revision
,并且您在此处重新键入时将其修复,但不是你的原始资料。