Perl中的数字和字符串连接
我是Perl新手。我想用Perl中的数字和字符串连接,perl,concatenation,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" #
运算符连接一个字符串和一个数字,第一个参数将是一个数字。我可以使用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中会给出“”?有时,空白是重要的。
34。“hello”
是“34hello”
34。“hello”
是一个解析错误,因为34。
看起来像是浮点数的开始(可能是34.5
),然后当解析器得到一个“
而不是另一个数字时,它不知道该做什么。如果在点运算符周围使用空格,代码看起来会更好,但后面必须有数字
34.34.34
是一种称为a或“v字串”的特殊结构,当一个数字中有多个点时,会出现这种结构,可以选择前面有一个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
这是一个很好的问题。
字符有多种含义:
my $x = 34;
my $y = 34;
say $x.$y; # 3434
3434 / 100 == 34.34
请注意,小数分隔符必须紧跟在整数部分之后,否则将被解释为串联:34.34==3434
v
作为前缀:
34.34.34 eq v34.34.34
每个数字都被转换为相应的字符,例如64.64.64 eq“@@@@”
谢谢你的回答。下次我自己怎么能找到答案呢。文档中有吗?这对我会有帮助的@hobbs@Wordzilla尽可能多地阅读perldocs,尤其是
perlsyn
,perldata
和perlop
,了解这些内容:)谢谢@hobbs,我想perlop中没有。它将其显示为用于串联的二进制运算符,而不处理这种情况。在文档中你的答案的确切来源或引证将非常有用。实际上,文档中并没有太多涉及这种模糊性。在perltrap
中,提到了
字符的连接和数字角色之间可能存在的混淆,但没有提到OP的具体情况,也没有提到如何使用空格来改善。谢谢@amon的回答。我怎样才能自己找到答案。在doc里找到了吗?我现在有了Perl编程。如果您在回答中提供源代码或链接,这将非常有帮助。@Wordzilla hobbs已将手册页的名称作为其答案下的注释发布,您也可以在上在线阅读(只需在搜索字段中键入页面名称)。您确定“hello.34
确实给出了hello.34
(带句号)?在命令行(Linux,)上,perl-le'打印“hello”.34'
输出hello34
(不带句号)。