## C 風格的循環通常不必要
你可以寫 C 風格的循環,但常常不需要它們。
不要在?`foreach`?的位置使用它們:
~~~
for (my $i = 0; $i <= $#foo; $i++) { # BAD
foreach (@foo) { # BETTER
~~~
不要在?`while`?的位置使用它們:
~~~
for (my $i = <STDIN>; $i; $i = <STDIN>) { # BAD
while (my $i = <STDIN>) { # BETTER
~~~
想想你編寫的代碼,并找找感覺。
## 匿名哈希和數組
創建一個匿名數組引用,并給它賦值:
~~~
my $array = [ 'one', 'two', 'three' ];
~~~
匿名是因為我們不必創建數組。
哈希有相似的構造器:
~~~
my $hash = { one => 1, two => 2, three => 3 };
~~~
看作你應認為的而非引用。
## `q[qrwx]?//`、`m//`、`s///`?及?`y///`
Perl 讓你自行指定定界符:
* 單引號:`'text' => q/text/`
* 雙引號:`"text" => qq/text/`
* 正則表達式:`qr/text/`。除此之外,在 Perl 匹配及替換操作符外沒有別的方式指定正則表達式匹配。
* 單詞:`("text", "text") => qw(text text);`
* 反引號:```text` => qx/text/``
* 正則匹配(`m//`)、正則替換(`s///`)、及轉換(`tr///`、`y///`) 工作方式相同
你可以使用除空白之外的任意字符。但要注意平衡括號或花括號:
~~~
qq//
qq#A decent <html> delimiter </html> #
qq( man perl(1) for details ) # valid!
~~~
## `global`、`local`、`my`?及?`our`
* 使用?`use vars`?聲明全局變量
* 使用?`my`?聲明詞法變量
* `local`?并非你所認為的,除非你知道為何使用?`local`,否則使用?`my`?代替
* 僅當你的包需要全局變量時使用?`our`