🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: dk.edb.system.unix
4 messages
4 total messages Started by Leif Neland Sun, 17 Mar 2013 22:45
perl: unpack og fejl i inddata
#374
Author: Leif Neland
Date: Sun, 17 Mar 2013 22:45
29 lines
2371 bytes
Noget datalogning er skrevet i perl.

Data bliver fortolket af denne linie, men der er nogle gange st�j i 
signalet.

my ($ctrl_code, $func_code, @data) = unpack("xxxxxxCCxC".$len."xx", 
$response);

Det kan give denne fejlmeddelelse, og programmet d�r:

received packet from inverter:
00
'x' outside of string in unpack at ./eversolar.pl line 340.

Men det er jo veldokumenteret i man perlpacktut:

Be warned, though, that unlike regular expressions, if the "unpack"
template doesn't match the incoming data, Perl will scream and die.

Kan man ikke try/catch'e dette, s� programmet h�ndterer fejlen?

Men jeg har nu tilf�jet en test p� at l�ngden af en datapakke skal v�re 
mindst 4 bytes, s� g�r det nok...

Leif

-- 
Husk k�relys bagp�, hvis din bilfabrikant har taget den idiotiske 
beslutning at undlade det.
Re: perl: unpack og fejl i inddata
#471
Author: Michael Rasmussen
Date: Sun, 17 Mar 2013 23:04
21 lines
1766 bytes
On Sun, 17 Mar 2013 23:45:00 +0100
Leif Neland <leif@neland.dk> wrote:

> 
> Kan man ikke try/catch'e dette, så programmet håndterer fejlen?
> 
Try/catch i Perl:
eval {
   ....
}
if $@ {
  # catch
}


-- 
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.
Re: perl: unpack og fejl i inddata
#472
Author: Michael Rasmussen
Date: Sun, 17 Mar 2013 23:05
32 lines
2001 bytes
On Mon, 18 Mar 2013 00:04:20 +0100
Michael Rasmussen <mir@miras.org> wrote:

> On Sun, 17 Mar 2013 23:45:00 +0100
> Leif Neland <leif@neland.dk> wrote:
> 
> > 
> > Kan man ikke try/catch'e dette, så programmet håndterer fejlen?
> > 
> Try/catch i Perl:
> eval {
>    ....
> }
> if $@ {
>   # catch
> }
> 
> 
Ups
eval {
   ....
};
if $@ {
  # catch
}
-- 
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.
Re: perl: unpack og fejl i inddata
#473
Author: Peter Makholm
Date: Mon, 18 Mar 2013 05:26
30 lines
2560 bytes
Michael Rasmussen <mir@miras.org> writes:

> eval {
>    ....
> };
> if $@ {
>   # catch
> }

Uhmm, et s�t parenteser rundt om $@?

Dette er det basale primitiv til at lave exception-h�ndtering i
Perl. Men det har nogle faldgruber, for eksempel at eval er en funktion
og ikke et keyword p� linje med 'if' og 'for'.

Derfor findes der en r�kke moduler der g�r det lettere at h�ndtere det
helt korrekt. Det simple module jeg vil anbefale er Try::Tiny. Det har
stadigv�k den ulempe at try/catch stadigv�k er fuktioner og ikke
keywords s� man skal huske at afslutte med et semikolon og det har den
ulempe at man ikke kan returnere fra indersiden af en try/catch blok.

En mere komplet l�sning er TryCatch der dels g�r try/catch til keywords
s� de syntax-m�ssigt virker som forventet og dels g�r det muligt at
returnere inden fra en try/catch blok.

L�nger diskussion af fejlh�ndtering i Perl skal nok foreg� i
dk.edb.programmering.perl.


//Makholm
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads