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

default-Werte bei Parameterübergabe: 0 als Wert zulassen



<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
pktm
 2008-09-28 22:34
#115002 #115002
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Gab es da nicht einen Kniff, mit dem man bei Parameterübergaben an Operationen den Wert 0 zulassen kann?

Weil, bei folgendem Beispiel würde ein Fehler auftauchen:
Code: (dl )
1
2
3
4
5
s(0); # Aufruf mit 0

sub s {
my $arg = shift or die("Missing arg.");
}


Bislang verhindere ich, dass ein Fehler erzeugt wird, indem ich, wenn denn die 0 zulässig ist, den Wert einfach einlese (my $arg = shift;) und dann später prüfe, ob er definiert ist (die("Missing arg.") unless defined $arg;).

Aber ich mag diese kompakte Schreibung, und ich meine, ich hätte vor einiger Zeit hier mal was darüber gelesen.

Weiß noch jemand, wo es war?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
moritz
 2008-09-28 22:46
#115003 #115003
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Unter perl 5.10 kann man // anstelle von || nehmen, das testet auf defined().

Alternativ kann man dein Beispiel auch so schreiben:

Code: (dl )
1
2
3
4
sub s {
die "missing arg" unless @_;
my $arg = shift;
}
pktm
 2008-09-28 22:54
#115005 #115005
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
moritz+2008-09-28 20:46:14--
Unter perl 5.10 kann man // anstelle von || nehmen, das testet auf defined().

Alternativ kann man dein Beispiel auch so schreiben:

Code: (dl )
1
2
3
4
sub s {
die "missing arg" unless @_;
my $arg = shift;
}


Das Beispiel da funktioniert aber nur, wenn es genau 1 Parameter ist.
Ich habe mehrere, hatte das oben nur reduziert.
http://www.intergastro-service.de (mein erstes CMS :) )
topeg
 2008-09-28 23:00
#115006 #115006
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
So sollte es doch gehen, oder?
Code: (dl )
1
2
3
sub s {
my $arg = defined($_[0])?shift:die("Missing arg.");
}
pktm
 2008-09-29 00:46
#115007 #115007
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ja! Schön kompakt!
Es lebe der ternäre Operator.
http://www.intergastro-service.de (mein erstes CMS :) )
Linuxer
 2008-09-29 02:23
#115008 #115008
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
pktm+2008-09-28 20:54:50--
moritz+2008-09-28 20:46:14--
...
Code: (dl )
1
2
3
4
sub s {
die "missing arg" unless @_;
my $arg = shift;
}


Das Beispiel da funktioniert aber nur, wenn es genau 1 Parameter ist.
Ich habe mehrere, hatte das oben nur reduziert.


Naja, den Code kann man ja anpassen...

Code (perl): (dl )
1
2
3
4
5
sub foo {
  die "missing arg(s)" unless @_ < 23;
  my $arg = shift;
  # ...
}


edit1: Nachfrage umformuliert
edit2: Code angepasst: Operator == durch < ersetzt.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
bloonix
 2008-10-01 16:22
#115068 #115068
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo ptkm,

http://search.cpan.org/src/GBARR/IO-1.2301/IO/Socket.pm

so find ich es ganz nett.

Gruss,
bloonix
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
pktm
 2008-10-01 16:41
#115072 #115072
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ha, der benutzt das direkt als Dokumentation.
Gefällt mir aber nicht.

Bei mir sieht es jetzt so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
=head2 new( $canvas, $label, $parent? )

=cut

sub new {
my $class = shift;
my $canvas = shift or croak("Missing canvas arg.");
my $label = (defined $_[0] ? shift : croak("Missing label arg."));
my $parent = shift; # may be undef
# [...]
}
http://www.intergastro-service.de (mein erstes CMS :) )
bloonix
 2008-10-02 10:10
#115097 #115097
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Ja, super toll. Du hast nun zwei croaks, obwohl du nur einen brauchst. ;-)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Struppi
 2008-10-02 11:44
#115098 #115098
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Wieso braucht er nur einen?
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2008-09-28 22:34.