SkÃ¥ne Sjælland Linux User Group - http://www.sslug.dk Forside   Tilmelding   Postarkiv   Forum   Kalender   Søg
MhonArc Dato: [Date Prev] [Kronologisk oversigt] [Date Next]   TrÃ¥d: [Date Prev] [Oversigt trÃ¥de] [Date Next]   MhonArc
 

Re: [PERL] Tomt array driller



* Hans Schou (sslug@sslug) [2001-01-13 17:58]:
> Kaare Rasmussen wrote:
> 
> > if (defined($line[0]))
> 
> Den gik ikke, men denne gjorde, hvorfor?
>   if (defined($line[0]) && $line[0] && $line[14]) {

    Måske det var det Kaare mente; altså at der skulle et check for 
    defined udenom. (as in: if defined(..) { if ($line[...) { .. }})

    Men der stadig risiko for at du får warnings. Hvis
    f.eks. dit program støder på en linie som ser ud som denne:

    foo;bar;baz

    så vil @line blive til en array på 3 elementer, $line[0] vil være
    defined, $line[0] vil være sand og du vil komme frem til

       $line[14]

    som er undefined og derfor giver en warning. Så hvis man er rigtig
    paranoid må man skrive

      if (defined($line[0]) and $line[0] and defined($line[14]) and
              $line[14]) {

    eller

      if (@line > 14 and $line[0] and $line[14]) {

    Nu bliver jeg nok slagtet af nogle warning-fanatikere (bring on the
    flames!), men du kunne også overveje at slå warnnigs fra når du er
    færdig med at udvikle på dit script. Det er lidt en holdningsmæssig
    diskussion, men tager man f.eks. flg kode:

       my @line = split /;/;
       if ($line[0] and $line[14]) {
           push @goodlines, join ";", @lines[0,14];
       }
       else {
           push @badlines, join ";", @lines;
       }

    Det er da forholdsvis læsbart, og default (no warnings) opførslen
    hvor undef evaluerer til falsk uden warning er vel ganske rimelig?

    Misforstå mig ikke, jeg er blevet reddet af use warnings mange
    gange, men af og til er gør warnings bare ikke det man helst vil...

    Og selv om 5.6's lexical warnings er fine, så synes jeg i praksis
    det er lidt suspekt: Lokal brug af use warnings er mystisk. Hvis man
    ligefrem er _opmærksom_ på at i en blok kan der blive genereret
    warnings, så bør man vel checke for det og lade sit program _selv_
    udskrive fejlmeddelelser? Og hvis man skriver

       { 
           no warnings;        # aka "Der er _ikke_ fejet noget ind under ..."

           # Some Funky Code

       }

    bliver læseren nok også lidt mistænkelig...

    Oh, well. Det jeg vil frem til er vist bare flg. spørgsmål: Hvordan
    bruger _du_ leksikale warnings?

Peter

-- 
ln -s /dev/random ~/.plan


 
Forside   Tilmelding   Postarkiv   Oversigt   Kalender   Søg

 
 
Henvendelse vedrørende websiderne til <www_admin>. Senest ændret 2005-08-10, klokken 19:53
Denne side vedligeholdes af MHonArc .