String “关于操作员”;x";在Perl中
我对以下代码输出感到困惑:String “关于操作员”;x";在Perl中,string,perl,String,Perl,我对以下代码输出感到困惑: print "1234567890" x (10+9)/10; 输出是 1.23456789012346e+188. 我知道为了达到预期的效果,代码应该是这样的: "1234567890" x ((10+9)/10) 但为什么前一个代码生成的是浮点数而不是字符串?运算符“x”在Perl中不是字符串运算符吗?x是字符串运算符,但您正在使用它生成的字符串,它将“12345678950123456789012345678901234567890123456789012
print "1234567890" x (10+9)/10;
输出是
1.23456789012346e+188.
我知道为了达到预期的效果,代码应该是这样的:
"1234567890" x ((10+9)/10)
但为什么前一个代码生成的是浮点数而不是字符串?运算符“x”在Perl中不是字符串运算符吗?x是字符串运算符,但您正在使用它生成的字符串,它将“1234567895012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890”并将其除以10。x是一个字符串运算符,但您在它生成的字符串上使用/,它将“12345678901234567134567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567918901234567890123456789012345679189012345678901234567890123456789012345678901234567890”然后除以10。似乎
1234467890
是concat'd 19次,然后除以10创建一个float。似乎1234467890
是concat'd 19次,然后除以10创建一个float。好吧,让我们看看perl如何使用该模块处理该表达式:
很明显,它把它当作一个数字来评估。也许是因为分裂?让我们试着把它拿出来
$ perl -MO=Deparse,-p -e 'print "1234567890" x (10+9);'
print('1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890');
看起来差不多对。所以,基本上,它会打印出那个数字,因为由于除法的作用,你把那个很长的字符串当作一个数字
请注意,
x
和/
具有相同的优先级,并且是左关联的,因此a x b/c
被视为(a x b)/c
好吧,让我们看看perl如何使用模块来处理该表达式:
很明显,它把它当作一个数字来评估。也许是因为分裂?让我们试着把它拿出来
$ perl -MO=Deparse,-p -e 'print "1234567890" x (10+9);'
print('1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890');
看起来差不多对。所以,基本上,它会打印出那个数字,因为由于除法的作用,你把那个很长的字符串当作一个数字
请注意,x
和/
具有相同的优先级,并且是左关联的,因此a x b/c
被视为(a x b)/c
x
和/
具有相同的优先级。所以
print "1234567890" x (10+9)/10;
相当于
print( ("1234567890" x (10+9)) / 10 );
请注意,x
不仅仅是字符串重复运算符。它可以生成列表:(1)x3
是(1,1,1)
x
和/
具有相同的优先级。所以
print "1234567890" x (10+9)/10;
相当于
print( ("1234567890" x (10+9)) / 10 );
请注意,x
不仅仅是字符串重复运算符。它可以生成列表:(1)x3
是(1,1,1)