|
|||||||||||||||||||||||||||
* 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
|
||||||||||||||
|
||||||||||||||