Perl中的数字和字符串连接

时间:2014-02-22 19:42:46

标签: perl concatenation

我是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中给出了“”“。

2 个答案:

答案 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)

很好的问题。 .字符有多种含义:

  1. 这是连接运算符

    my $x = 34;
    my $y = 34;
    say $x.$y; # 3434
    
  2. 它是浮点数字文字中的小数点分隔符:

    3434 / 100 == 34.34
    

    请注意,小数点分隔符必须紧跟在整数部分之后,或者它被解释为连接:34 .34 == 3434

  3. 它是v-strings中的分隔符(其中“v”通常代表版本)。在v-string中,每个字符用句点分隔,并且可选地以v为前缀:

    34.34.34 eq v34.34.34
    

    每个数字都被翻译成相应的字符,例如64.64.64 eq "@@@"