Learning Perl: 3.3. List Literals

Previous Page
Next Page

 

3.3. List Literals

An array (the way you represent a list value within your program) is a list of comma-separated values enclosed in parentheses. These values form the elements of the list:

    (1, 2, 3)      # list of three values 1, 2, and 3
    (1, 2, 3,)     # the same three values (the trailing comma is ignored)
    ("fred", 4.5)  # two values, "fred" and 4.5

    ( )            # empty list - zero elements
    (1..100)       # list of 100 integers

That last one uses the ..range operator, seen here for the first time, which creates a list of values by counting from the left scalar up to the right scalar by ones:

    (1..5)            # same as (1, 2, 3, 4, 5)
    (1.7..5.7)        # same thing - both values are truncated
    (5..1)            # empty list - .. only counts "uphill"
    (0, 2..6, 10, 12) # same as (0, 2, 3, 4, 5, 6, 10, 12)
    ($m..$n)          # range determined by current values of $m and $n
    (0..$#rocks)      # the indices of the rocks array from the previous section

As you can see from those last two items, the elements of a list literal are not necessarily constantsthey can be expressions that will be newly evaluated each time the literal is used:

    ($m, 17)       # two values: the current value of $m, and 17
    ($m+$o, $p+$q) # two values

Of course, a list may have any scalar values, like this typical list of strings:

    ("fred", "barney", "betty", "wilma", "dino")

3.3.1. The qw Shortcut

It turns out that lists of simple words (like the previous example) are frequently needed in Perl programs. The qw shortcut makes it easy to generate them without typing a lot of extra quote marks:

    qw( fred barney betty wilma dino ) # same as above, but less typing

qw stands for "quoted words" or "quoted by whitespace," depending upon whom you ask. Either way, Perl treats it like a single-quoted string so, you can't use /n or $fred inside a qw list as you would in a double-quoted string. The whitespace (characters like spaces, tabs, and newlines) will be discarded, and whatever remains becomes the list of items. Since whitespace is discarded, here's another (but unusual) way to write that same list:

    qw(fred
      barney     betty
    wilma dino)  # same as above, but pretty strange whitespace

Since qw is a form of quoting, you can't put comments inside a qw list.

The previous two examples have used parentheses as the delimiter, but Perl lets you choose any punctuation character as the delimiter. Here are some of the common ones:

    qw! fred barney betty wilma dino !
    qw# fred barney betty wilma dino #   # like in a comment!
    qw( fred barney betty wilma dino )
    qw{ fred barney betty wilma dino }

    qw[ fred barney betty wilma dino ]
    qw< fred barney betty wilma dino >

As those last four show, sometimes the two delimiters can be different. If the opening delimiter is one of those "left" characters, the corresponding "right" character is the proper closing delimiter. Other delimiters use the same character for start and finish.

If you need to include the closing delimiter within the string as one of the characters, you probably picked the wrong delimeter. But if you can't or don't want to change the delimiter, you can include the character using the backslash:

    qw! yahoo/! google excite lycos ! # include yahoo! as an element

As in single-quoted strings, two consecutive backslashes contribute one single backslash to the item.

Though the Perl motto is "There's More Than One Way To Do It," you may well wonder why anyone would need all of those different ways. Well, you'll see later there are other kinds of quoting where Perl uses this same rule, and it can come in handy in many of those. But even here, it could be useful if you were to need a list of Unix filenames:

    qw{
      /usr/dict/words
      /home/rootbeer/.ispell_english
    }

That list would be inconvenient to read, write, and maintain if the slash were the only available delimiter.

Previous Page
Next Page
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值