不确定产值的原因

时间:2016-11-16 19:50:09

标签: perl

我在perl代码中有这两个语句,我试图理解。

our $CSITOOLS=`/x/eng/csitools/netapp_menu/common/csitools.sh`;
print "${CSITOOLS}\n";

输出:

/x/eng/csitools

${VARIABLE_NAME}如何运作? (在这种情况下为{CSITOOLS}

谢谢!

3 个答案:

答案 0 :(得分:5)

来自perldata

  

与某些shell一样,您可以将变量名称括在大括号中   消除它与下列字母数字(和下划线)的歧义。

那是:

如果您有一个像$foo这样的变量,并且想要在字符串中插入该变量:

my $string = "This is $foobar";

然后Perl会查找变量$foobar。清除变量的名称 只需$foo你需要写

my $string = "This is ${foo}bar";

这是分隔变量名称的方法。在您的特定情况下,由于{}已经明确无误,因此不需要使用curles "$CSITOOLS\n"。但是,它没有任何害处。

答案 1 :(得分:3)

Perl允许您用大括号({})包围标量变量的名称,以将其名称与任何周围的字符分开。想象一下,你在变量中有“item”这个词,你想在一个字符串中打印item99,中间没有空格:

my $name = "item";
print "${name}99\n";

没有大括号,perl会像这样解释变量:

print "$name99\n";

...这是一个未声明的,未定义的变量,绝对不是你的意思。启用warnings后,将显示如下内容:

Use of uninitialized variable in ...

如果没有启用警告,程序可能会愉快地运行并执行其他操作,可能/可能会破坏远远不够的东西。这使得事情很难排除故障。

在您的简单情况下,不需要大括号,并且您不会在print语句中经常看到它们,除非您需要在插值时将变量与其他有效变量字符之间没有空白字符组合在一起在一个字符串中。

答案 2 :(得分:2)

来自perldoc.perl.org

  

由反引号(严重重音符号)包围的字符串首先进行双引号插值。然后将其解释为外部命令,该命令的输出是反引号字符串的值,就像在shell中一样。

显然,csitools.sh的结果是字符串/x/eng/csitools