Perl: 3.5. Interpolating Arrays into Strings
2010-07-21 17:25
253 查看
3.5. Interpolating Arrays into StringsLike scalars, array values may be interpolated into a double-quoted string. Elements of an array are automatically separated by spaces[*] upon interpolation:[*] The separator is the value of the special $" variable, which is a space by default. @rocks = qw{ flintstone slate rubble }; print "quartz @rocks limestone/n"; # prints five rocks separated by spaces There are no extra spaces added before or after an interpolated array; if you want those, you'll have to put them in yourself: print "Three rocks are: @rocks./n"; print "There's nothing in the parens (@empty) here./n"; If you forget that arrays interpolate like this, you'll be surprised when you put an email address into a double-quoted string. For historical reasons,[ ] this is a fatal error at compile time: [ ] Since you asked: Before Version 5, Perl would silently leave uninterpolated an unused array's name in a double-quoted string. So, "fred@bedrock.edu" might be a string containing an email address. This attempt to "Do What I Mean" will backfire when someone adds a variable named @bedrock to the program; now the string becomes "fred.edu" or worse. $email = "fred@bedrock.edu"; # WRONG! Tries to interpolate @bedrock $email = "fred/@bedrock.edu"; # Correct $email = 'fred@bedrock.edu'; # Another way to do that However, in versions of Perl 5 soon to be released as we write this, the behavior of an unseen array variable will become similar to an unseen scalar variable, i.e., replaced with an empty string with a warning if warnings are enabled. The Perl developers apparently figure that 10 years of fatality are enough warning. A single element of an array will be replaced by its value as you'd expect: @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"; # same thing The index expression is evaluated as an ordinary expression, as if it were outside a string. It is not variable interpolated first. In other words, if $y contains the string "2*4", we're still talking about element 1, not element 7, because "2*4" as a number (the value of $y used in a numeric expression) is just plain 2.[*] If you want to follow a simple scalar variable with a left square bracket, you need to delimit the square bracket so it isn't considered part of an array reference: [*] Of course, if you've got warnings turned on, Perl is likely to remind you that "2*4" is a funny-looking number. @fred = qw(eating rocks is wrong); $fred = "right"; # we are trying to say "this is right[3]" print "this is $fred[3]/n"; # prints "wrong" using $fred[3] print "this is ${fred}[3]/n"; # prints "right" (protected by braces) print "this is $fred"."[3]/n"; # right again (different string) print "this is $fred/[3]/n"; # right again (backslash hides it) |
相关文章推荐
- Learning Perl: 8.5. Interpolating into Patterns
- how to set interface arrays : Illegal index into array of interfaces
- Arrays_Strings 判断字符串中的字符是否唯一@CareerCup
- Arrays_Strings 利用isSubstring检查是否子串 @CareerCup
- Smart Paster...great tool to paste large strings into Vs.net
- CareerCup chapter 1 Arrays and Strings
- Android资源文件res的使用详解(strings,layout,drawable,arrays等)
- Simple Java—Strings and Arrays(三)为什么String被设计成了不可变型
- php Split an Array into N Arrays
- Chapter 1 Arrays and Strings - 1.3
- Chapter 1 Arrays and Strings - 1.8
- Perl using Arrays
- Recipe 1.2 Substituting variables into strings
- Chapter 1 | Arrays and Strings--旋转N*N矩阵的图像和处理M*N矩阵,若某位置为0则所在行和列均置0
- Arrays_Strings 翻转字符串 @CareerCup
- Simple Java—Strings and Arrays(四)从length和length()开始谈Java
- Arrays and Strings----3
- C++Primer第五版【学习笔记】——第三章 Strings,Vectors,Arrays
- Android资源文件res的使用详解(strings,layout,drawable,arrays等)
- CC150 Arrays and Strings 1.1 ~ 1.3 Unique Characters, Reverse String, IsPermutation