Thread Merkwürdiges Erlebnis mit push(): push gegen fetchrow_array() (12 answers)
Opened by Froschpopo at 2004-08-05 08:38

Crian
 2004-08-06 12:42
#85410 #85410
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
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:

Code: (dl )
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

View full thread Merkwürdiges Erlebnis mit push(): push gegen fetchrow_array()