Unsigned.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package Unsigned;
use strict;
use warnings;
use Scalar::Util qw( looks_like_number );
use Carp qw( croak );
sub TIESCALAR {
my ($class, $number) = @_;
my $self = bless \$number, $class;
$self->_check_number;
return $self;
}
sub _check_number {
my ($self, $number) = @_;
my $checkvalue = defined $number ? $number : $$self;
croak "Sie müssen eine Nummer eingeben" if not looks_like_number($checkvalue);
croak "Nur Positive Nummer erlaubt" if $checkvalue < 0;
}
sub FETCH { ${$_[0]} }
sub STORE {
my ($self, $newvalue) = @_;
$self->_check_number($newvalue);
$$self = $newvalue;
}
1;
Unsigned.pl
#!/usr/bin/perl
use strict;
use warnings;
use Unsigned;
tie my $wert, 'Unsigned', 10;
print $wert, "\n";
$wert = 100;
print $wert, "\n";
$wert = -100;
print $wert, "\n";
$wert = 'hallo';
print $wert, "\n";
Ausgabe:
10
100
Nur Positive Nummer erlaubt at ./Unsigned.pl line 12
Naja man kann etwas nachbauen wenn man es möchte. Ob sich der Aufwand lohnt, und tie dafür zu benutzen (5-6 mal langsamer als normale Variable zu benutzen) musst du selber abwiegen.
Allerdiengs wüsste ich jetzt auch nicht wofür ein expliziter Unsigned Wert Sinvoll wäre. Meistens reicht es doch aus "if ( $wert < 0 ) { ... }" zu schreiben?\n\n
<!--EDIT|sid burn|1179913032-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de