找回密码
 注册
查看: 3743|回复: 0

perl将数组插入字符串

[复制链接]
发表于 2011-11-13 10:16:07 | 显示全部楼层 |阅读模式
和标量类似,数组也可以插入双引号的字符串中。插入的数组元素会自动由空格◆分开:
◆分隔符是变量$’’的值,其默认值为空格(space)。
@rocks = qw{ flintstone slate rubble };
print “quartz @rocks limestone\n”; #输出为5 种rocks 由空格分开
插入的数组元素的第一个元素前面和最后一个元素后面不会插入空格,如果需要可以自己加入:
print “Three rocks are: @rocks.\n”;
print “There’s nothing in the parens (@empty) here..\n”;
如果忘了数组插入的规则,当把email 地址插入双引号字符串时可能出现意想不到的结果。由于历史原因◆,这将引起编
译时的严重错误:
◆你可能会问:在Perl5 之前,Perl 将不会替换没有定义过的数组标量。因此,“fred@bedrock.edu” 将表示email 地址。但当某人加入了一
个变量@bedrock;则这字符串将变成“fred.edu”或者更糟。
$email =“fred@bedrock.edu”; #错误!将会替换@bedrock
$email =“fred\@bedrock.edu”; #正确
$email =‘fred@bedrock.edu’; #另一种方法
因此,在即将发行的Perl5(现在快发行Perl6 了:译者注),没有定义的数组变量的行为和没有定义的标量变量行为一致,
也就是说,当警告打开时,没有初始化的数组变量将引起警告。这是Perl 开发者10 年来经历的错误的结果。
只有一个元素的数组的被其值替换的行为和你预期的类似:
@fred = qw(hello dolly);
$y = 2;
$x =“This is $fred[1]’s place”; # “This is dolly’s place”
$x =“This is $fred[$y-1]’s place”; #同上
索引表达式被当作普通表达式求值,看起来和不在字符串中是一样的。其变量不会首先被赋值的。换句话说,如果$y 为“2*4”,
那上述表达式的值为1,而非7,因为“2*4”首先当作数字时($y 在数字表达式中)为2◆。如果想在一个标量变量后接一
个左中括号符,那应当在其间加入分隔符,否则会被作为数组看待:
◆当然,当把警告打开时,Perl 会提醒你“2*4” 是一个funny-looking 数字。
@fred = qw(eating rocks is wrong);
$fred = “right”; #我们将打印“this is right[3]”
print “this is $fred[3]\n”; #打印出“wrong”使用$fred[3]
print “this is ${fred}[3]\n”; #打印出“right”(由花括号分开)
print “this is $fred”. “[3]\n”; #正确(两个字符串,右. 分开)
print “this is $fred\[3]\n”; #正确(利用反斜线转义)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 19:14 , Processed in 0.112923 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表