Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6606[/thread]

Warnung loswerden



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Crian
 2004-12-31 17:54
#50529 #50529
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich bekomme die Warnung

Code: (dl )
Possible attempt to put comments in qw() list at V:\privat\perl\ged\ged.pl line 3643.


wegen des folgenden Codes:

Code: (dl )
1
2
3
4
5
    my @colors = (qw/#000000 #AA0000 #00AA00 #0000AA
                    #444444 #FF0000 #00FF00 #0000FF
                    #888888 #FFFF00 #00FFFF #FF00FF
                    #CCCCCC #FFAA00 #00BBBB #880088
                    #FFFFFF #AA8866 #008888 #660066/);


Wie kann ich das am elegantesten umgehen? In einem Block mit no warnings und @colors außerhalb deklarieren? Oder in der Art

Code: (dl )
    my @colors = map { "#$_" } (qw/000000 AA0000 00AA00 0000AA ... /);


(falls das so geht), oder gibt es noch eine schönere Methode?
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
[E|B]
 2004-12-31 18:07
#50530 #50530
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ich kann den Fehler ehrlich gesagt nicht nachvollziehen (v. 5.8.4). Wie wäre es, wenn du es in Hochkommas setzt?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
pq
 2004-12-31 18:23
#50531 #50531
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
die map-methode ist wohl die beste. siehe perldoc perldiag
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
coax
 2004-12-31 18:26
#50532 #50532
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,31.12.2004, 16:54]
Wie kann ich das am elegantesten umgehen?
[/quote]

In dem du # escapest (mich stoert das auch).

Code: (dl )
1
2
3
4
5
    my @colors = (qw/\#000000 \#AA0000 \#00AA00 \#0000AA
                    \#444444 \#FF0000 \#00FF00 \#0000FF
                    \#888888 \#FFFF00 \#00FFFF \#FF00FF
                    \#CCCCCC \#FFAA00 \#00BBBB \#880088
                    \#FFFFFF \#AA8866 \#008888 \#660066/);


Grusz Christian.
,,Das perlt aber heute wieder...'' -- Dittsche
Crian
 2004-12-31 18:29
#50533 #50533
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ah, das escapen ist ein neuer Aspekt. Spricht irgendwas dagegen, weshalb die Map-Variante vorzuziehen wäre?
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
format_c
 2004-12-31 18:34
#50534 #50534
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Crian: Was hindert dich daran einfach nur die drei Werte in dem Array zu speichern und erst wenn sie zur Ausgaben gebraucht werden das "#" voranstellen?

Gruß Alex
Dubu
 2004-12-31 18:36
#50535 #50535
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[E|B
,31.12.2004, 17:07]Ich kann den Fehler ehrlich gesagt nicht nachvollziehen (v. 5.8.4).

Kein Fehler, Warnung. Bist du sicher, warnings eingeschaltet zu haben?

Quote
Wie wäre es, wenn du es in Hochkommas setzt?

Innerhalb von qw{} werden Hochkommata zu den Werten gezaehlt, also muesste man auf qw{} verzichten:
Code: (dl )
my @colors = ('#000000', '#AA0000', '#00AA00', ...);

Das ist natuerlich mehr Tipparbeit und fehleranfaelliger als qw{} zu benutzen.

@Crian: Die Loesung mit dem map() ist zwar schoen idiomatisch, verlangt aber zusaetzlich zu der in Compilezeit aufgebauten Liste noch die Laufzeitbearbeitung. Die Loesung, in einem Block die passenden warnings abzuschalten, halte ich fuer besser. Speziell hier brauchst du ja nur die qw-Warnung abzuschalten:
Code: (dl )
1
2
3
4
5
my @colors;
{
   no warnings 'qw';
   @colors = qw/#000000 #AA0000 #00AA00 #0000AA .../;
}

Das Programm wird dadurch allerdings unuebersichtlicher. Tja, letztendlich doch Geschmackssache.
coax
 2004-12-31 18:38
#50536 #50536
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,31.12.2004, 17:29]Ah, das escapen ist ein neuer Aspekt. Spricht irgendwas dagegen, weshalb die Map-Variante vorzuziehen wäre?[/quote]
Eigentlich nicht. Ich wuerde auch die Map-Variante vorziehen (spart Tipparbeit und ist weniger fehleranfaellig {kann oefters vorkommen, dass man ein \ vergisst}).
,,Das perlt aber heute wieder...'' -- Dittsche
Crian
 2004-12-31 18:58
#50537 #50537
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Außerdem warnt er trotz escapen ... ^^ Nun siehts so aus

Code: (dl )
1
2
3
4
5
    my @colors = map { "#$_" } (qw/000000 AA0000 00AA00 0000AA
                                  444444 FF0000 00FF00 0000FF
                                  888888 FFFF00 00FFFF FF00FF
                                  CCCCCC FFAA00 00BBBB 880088
                                  FFFFFF AA8866 008888 660066/);


und funktioniert (ohne Warnung).


[quote=format_c,31.12.2004, 17:34]Was hindert dich daran einfach nur die drei Werte in dem Array zu speichern und erst wenn sie zur Ausgaben gebraucht werden das "#" voranstellen?[/quote]

Das ist nicht so schön wie die map-Variante, da ich dann an mehreren Stellen das Lattenkreuz hinzufügen müsste und die Chance das zu vergessen steigt. Also imho lieber gleich bei allen dazutun.

P.S. Hab ich eigentlich einen Schaden, S[iy]lvester nach 18 Uhr noch zu programmieren? :D (Naja, ihr seit ja auch hier ...)\n\n

<!--EDIT|Crian|1104512633-->
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
Taulmarill
 2004-12-31 20:00
#50538 #50538
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
die methode mit dem map gefällt mir, allerdings spare ich gerne zeilen wo es geht. das macht den code übersichtlicher:
Code: (dl )
1
2
3
my @colors = map { "#$_" }
qw/000000 AA0000 00AA00 0000AA 444444 FF0000 00FF00 0000FF 888888 FFFF00
00FFFF FF00FF CCCCCC FFAA00 00BBBB 880088 FFFFFF AA8866 008888 660066/;
\n\n

<!--EDIT|Taulmarill|1104516099-->
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2004-12-31 17:54.