我是Perl新手。我想用字符串连接一个字符串和一个数字。运算符和第一个参数将是一个数字。我可以使用join,sprintf并将它们打印为打印编号,字符串。但我试过了。运营商并得到以下
$foo = "hello".34 # gives hello.34
$foo = 34."hello" # gives an error
$foo = 34.34 # gives 34.34
$foo = 34.34.34 # gives """
$foo = "hello".34."hello" # gives an error
我在Perl调试器下尝试过它们。我的问题是为什么不将Perl连接数字和字符串与数字作为第一个参数,反之亦然。为什么34.34.34在Perl中给出了“”“。
答案 0 :(得分:9)
偶尔,空白是重要的。 34 . "hello"
是"34hello"
。 34."hello"
是一个解析错误,因为34.
看起来像是一个浮点数的开头(可能是34.5
),然后解析器在得到一个{时不知道该怎么做{1}}而不是另一个数字。如果你在点运算符周围使用空格,你的代码看起来会更好,但是在数字之后它是必需的。
"
是一个名为version string或“v-string”的特殊构造,当您有一个包含多个点的数字时,可以选择前面加34.34.34
。它创建一个字符串,其中每个字符 number 来自v-string中的数字。因此v
等于34.34.34
,因为chr(34) . chr(34) . chr(34)
是双引号,所以与chr(34)
相同。 V字符串很有用,因为它们比较了预期版本号的方式。数字'"""'
,但作为版本,5.10 < 5.9
。
答案 1 :(得分:5)
很好的问题。 .
字符有多种含义:
这是连接运算符
my $x = 34;
my $y = 34;
say $x.$y; # 3434
它是浮点数字文字中的小数点分隔符:
3434 / 100 == 34.34
请注意,小数点分隔符必须紧跟在整数部分之后,或者它被解释为连接:34 .34 == 3434
它是v-strings中的分隔符(其中“v”通常代表版本)。在v-string中,每个字符用句点分隔,并且可选地以v
为前缀:
34.34.34 eq v34.34.34
每个数字都被翻译成相应的字符,例如64.64.64 eq "@@@"
。