加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl: 3.5. Interpolating Arrays into Strings

发布时间:2020-12-15 20:56:51 所属栏目:大数据 来源:网络整理
导读:? 3.5. Interpolating Arrays into Strings Like 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 sp

Previous Page

Next Page

?

3.5. Interpolating Arrays into Strings

Like 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)

Previous Page

Next Page

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读