Perl中的数字和字符串连接

xtr*_*eak 8 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
Run Code Online (Sandbox Code Playgroud)

我在Perl调试器下尝试过它们.我的问题是为什么不将Perl连接数字和字符串与数字作为第一个参数,反之亦然.为什么34.34.34在Perl中给出""".

hob*_*bbs 10

时不时地,空白是重要的.34 . "hello""34hello".34."hello"是一个解析错误,因为它34.看起来像一个浮点数(可能34.5)的开头,然后解析器在得到一个"而不是另一个数字时不知道该怎么做.如果你在点运算符周围使用空格,你的代码看起来会更好,但是需要一个数字.

34.34.34是一个特殊的构造,称为版本字符串或"v-string",当您有一个包含多个点的数字时,可以选择前面带有一个v.它创建一个字符串,其中每个字符编号来自v字符串中的数字.所以34.34.34等于chr(34) . chr(34) . chr(34),既然chr(34)是双引号,那就是相同的'"""'.V字符串很有用,因为它们比较了预期版本号的方式.在数字上,5.10 < 5.9但作为版本,5.10.0 gt 5.9.0.

  • @Wordzilla尽可能多地阅读perldocs,特别是`perlsyn`,`perldata`和`perlop`这个东西:) (4认同)
  • 谢谢你的回答.我怎么能在下次自己找到答案.它可以在文档中找到吗?这对我有帮助.@hobbs (2认同)

amo*_*mon 6

好问题.该.角色具有多重意义:

  1. 它是连接运算符

    my $x = 34;
    my $y = 34;
    say $x.$y; # 3434
    
    Run Code Online (Sandbox Code Playgroud)
  2. 它是浮点数字文字中的小数分隔符:

    3434 / 100 == 34.34
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    34.34.34 eq v34.34.34
    
    Run Code Online (Sandbox Code Playgroud)

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