Besser ist übrigens
perldoc -q "quoting"
jedenfalls hat bei mir pq's Variante (auch mit geschützten Anführungszeichen) nicht funktioniert.
Und der Abschnitt ist lesenswert. Um den Diskussionen über perldoc-Hinweise aus dem weg zu gehen, zitiere ich ihn einfach mal:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
...>perldoc -q "quoting"
Found in C:\Perl\lib\pod\perlfaq4.pod
What's wrong with always quoting "$vars"?
The problem is that those double-quotes force stringification--
coercing numbers and references into strings--even when you
don't want them to be strings. Think of it this way:
double-quote expansion is used to produce new strings. If you
already have a string, why do you need more?
If you get used to writing odd things like these:
print "$var"; # BAD
$new = "$old"; # BAD
somefunc("$var"); # BAD
You'll be in trouble. Those should (in 99.8% of the cases) be
the simpler and more direct:
print $var;
$new = $old;
somefunc($var);
Otherwise, besides slowing you down, you're going to break code
when the thing in the scalar is actually neither a string nor a
number, but a reference:
func(\@array);
sub func {
my $aref = shift;
my $oref = "$aref"; # WRONG
}
You can also get into subtle problems on those few operations in
Perl that actually do care about the difference between a string
and a number, such as the magical "++" autoincrement operator or
the syscall() function.
Stringification also destroys arrays.
@lines = `command`;
print "@lines"; # WRONG - extra blanks
print @lines; # right
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite