Leser: 19
1 2 3 4
sub databases { my ( $self, $parameter ) = @_; return [ '/home/me/demo.sqlite' ]; }
my $dbh = $self->dbh('dbname');
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
package App::DBBrowser::DB::MyPlugin; use warnings; use strict; use DBI; sub new { my ( $class, $info ) = @_; bless $info, $class; } sub driver { my ( $self ) = @_; return 'SQLite'; } sub db_handle { my ( $self, $db ) = @_; my $dbh = DBI->connect( "DBI:SQLite:dbname=$db", '', '', { RaiseError => 1, PrintError => 0, sqlite_unicode => 1, }) or die $DBI::errstr; return $dbh; } sub databases { my ( $self ) = @_; return [ '/home/me/demo.sqlite' ]; } 1;
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
sub databases { my ( $self ) = @_; return \@ARGV if @ARGV; my $dirs = $self->{dirs_sqlite}; my $cache_key = $self->{plugin} . '_' . join ' ', @$dirs; my $ax = App::DBBrowser::Auxil->new(); my $db_cache = $ax->read_json( $self->{db_cache_file} ); if ( $self->{sqlite_search} ) { delete $db_cache->{$cache_key}; } my $databases = []; if ( ! defined $db_cache->{$cache_key} ) { print 'Searching...' . "\n"; for my $dir ( @$dirs ) { File::Find::find( ... push @$databases, ... ... ); } print 'Ended searching' . "\n"; $db_cache->{$cache_key} = $databases; $ax->write_json( $self->{db_cache_file}, $db_cache ); } else { $databases = $db_cache->{$cache_key}; } return $databases; }
2018-02-22T16:04:34 KuerbisIn $info sind Informationen drinnen, habe aber noch nicht daran gedacht, dass man das $self nennt.
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
#!/usr/bin/perl use warnings; use strict; package Box { sub new { my $classname = shift; my $self = {content => 1}; return bless($self, $classname); } sub addContent { my $self = shift; my $addition = shift; $self->{content} += $addition; } sub showContent { my $self = shift; print $self->{content}; print "\n"; } } my $box = Box->new(); $box->addContent(5); $box->showContent();
QuoteThe constructor can also accept additional parameters that define the object. Let's write a real constructor for the File class we used earlier:
1 2 3 4 5 6 7 8 9 10
package File; sub new { my $class = shift; my ( $path, $data ) = @_; my $self = bless { path => $path, data => $data, }, $class; return $self; }
2018-02-23T07:09:15 KuerbisIn Perl kann man dem Konstruktor Daten übergeben
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/usr/bin/perl use warnings; use strict; package Box { sub new { my $classname = shift; my $content_at_beginning = shift; my $self = {content => $content_at_beginning}; return bless($self, $classname); } } my $box1 = Box->new(1); my $box2 = Box->new(5);
package App::DBBrowser::DB::MyPlugin;
2018-02-22T16:08:28 KuerbisDie Informationen in $info sind nur ein Angebot, das Plugin könnte auch eine eigene Konfigurationsdatei benutzen.
1 2 3 4 5 6 7
sub new{ my $class = shift; my %cfg = ( name => '', ort => '', @_); }
2018-02-24T09:25:16 rostiCode (perl): (dl )my $person = Person->new( -name => 'Otto', -ort => 'Hamburg' ) || die $@;
1 2 3 4 5
sub dump_and_die{ my $self = shift; my $ref = shift || $self; die Dumper $ref; }
1 2 3 4 5 6 7 8 9
sub new{ my $class = shift; my %cfg = ( -name => '', @_); croak "-name ist zwingend erforderlich!!!" unless $cfg{-name}; }
2018-02-26T17:21:34 KuerbisBei der Suche im Netz wurde oft mit "get_" empfohlen.
$self->_dbh();
my $name = $user->first_name.' '.$user->last_name;
2018-02-27T12:47:54 MuffiCode (perl): (dl )my $name = $user->first_name.' '.$user->last_name;
Was [ist] daran nicht klar ... ?
2018-02-27T19:04:49 hlubenow
sub getDbHandle{...}
sub dbHandle{...}
2018-02-27T18:31:59 MarkusHAls Methodenname wird im allgemeinen empfohlen, Verben oder verbale Ausdrücke zu verwenden.
2018-02-27T19:07:08 hlubenow2018-02-27T18:31:59 MarkusHAls Methodenname wird im allgemeinen empfohlen, Verben oder verbale Ausdrücke zu verwenden.
Das macht ja auch Sinn, wenn man dabei an die (z.B. mechanische) Maschine denkt, die durch den Methodenaufruf etwas tun soll.
2018-02-28T05:30:29 rostiLogisch, Maschinen wissen ja auch was Verben sind. Genauso wie XML, CSV maschinenlesbar ist... Gibt der Maschine eine Chance dem Code zu verstehen ;).
Getränkeautomat->GibMirEinGetränk();
Auto->FahreMichNachBerlin();
T_800->BeschützeMichVorDemT_1000(Pumpgun);