Thread datentyp unsigned für perl? (13 answers)
Opened by tolgale at 2007-05-20 23:59

sid burn
 2007-05-23 12:47
#76799 #76799
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Unsigned.pm
Code: (dl )
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
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/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:
Code: (dl )
1
2
3
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

View full thread datentyp unsigned für perl?