1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#!/usr/bin/perl use 5.010; use strict; use warnings; use Crypt::CBC; use Date::Calc qw(Localtime); my $crypt = sub { my ($cb,$val) = @_; if (!defined $cb->{cipher}) { say "Debug: erzeuge Objekt"; $cb->{cipher} = Crypt::CBC->new( -key => 'foobar', -cipher => 'Blowfish', ); } if (defined $val) { return $cb->{cipher}->encrypt($val); } }; my %crypthash; say $crypt->(\%crypthash,'foo'); say $crypt->(\%crypthash,'bar');
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/usr/bin/perl use 5.010; use strict; use warnings; use Crypt::CBC; my $crypt = sub { my $val = shift; state %CB; my $cb = \%CB; if (!defined $cb->{cipher}) { say "Debug: erzeuge Objekt"; $cb->{cipher} = Crypt::CBC->new( -key => 'foobar', -cipher => 'Blowfish', ); } if (defined $val) { return $cb->{cipher}->encrypt($val); } }; say $crypt->('foo'); say $crypt->('bar');
1 2 3 4 5 6 7 8 9 10 11 12 13 14
use feature 'state'; my $crypt = sub { my $val = shift; state $cb; if (!defined $cb) { say "Debug: erzeuge Objekt"; $cb = Crypt::CBC->new( -key => 'foobar', -cipher => 'Blowfish', ); } if (defined $val) { return $cb->encrypt($val); } };
QuoteMit neuerem Perl geht sowas mit "state".
use 5.010;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#!/usr/bin/perl use strict; use warnings; use Crypt::CBC; use feature 'state'; my $crypt = sub { state $c; if (!defined $c) { print "Debug: erzeuge Objekt\n"; $c = Crypt::CBC->new( -key => 'foobar', -cipher => 'Blowfish', ); } return (defined $_[0] && $_[0] ne '' ? $c->encrypt($_[0]) : ''); }; print $crypt->('foo')."\n"; print $crypt->('bar')."\n"; print $crypt->('')."\n"; print $crypt->()."\n";
state $c = ...
2014-09-16T07:36:53 Muffiwenn du das debug nicht brauchst müsst auch eine direkte Zuweisung gehn.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/usr/bin/perl use strict; use warnings; use Crypt::CBC; use feature 'state'; my $crypt = sub { state $c = Crypt::CBC->new( -key => 'foobar', -cipher => 'Blowfish', ); $_[0] = '' if !defined $_[0]; return $c->encrypt($_[0]); }; print $crypt->('foo')."\n"; print $crypt->('bar')."\n"; print $crypt->('')."\n"; print $crypt->()."\n";
return $c->encrypt($_[0] // '');
1 2 3 4 5 6
my $cipher = Crypt::CBC->new( -key => 'foobar', -cipher => 'Blowfish', ); say $cipher->encrypt('foo'), Dumper $cipher;
2014-09-16T15:03:45 biancaIch wollte das encrypt Kapseln, das wird an mehreren Stellen gebraucht. Kann ja mal sein, dass ich das Verfahren ganz ändern will, dann will ich das nur an einer Stelle machen müssen.
2014-09-16T16:33:20 rostiund siehst im Code auch weiter unten, dass die Methode encrypt aufgerufen wird.