1 2 3 4 5 6
my @fred = qw{ 1 3 5 7 9 }; my $fred_total = &total(@fred); print "The total of \@fred is $fred_total.\n"; print "Enter some numbers on separate lines: "; my $user_total = &total(); print "The total of those numbers is $user_total.\n";
2013-07-23T17:23:37 RatteFrage nr1.
"my".. wozu brauch man "my" außerhalb von sub´s,schleifen etc. Ich habe das so verstanden das "my" die variable "schützt" in einer sub oder einer schleife(und außerhalb ist die variable dann nicht mehr bekannt). aber ich habe "my" auch schon außerhalb gesehen. wie habe ich das dann zu verstehen? oder habe ich mich da nur verguckt..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
... my $var1 = 1; # gültig in der ganzen datei { # einfacher block my $var2; # gültig bis zum passenden ende des blocks ... } # $var2-gültigkeit endet hier sub foo { my $var3; # gültig bis zum ende der subroutine print $var3; } { my $var1 = 23; # "überschreibt" äussere variable $var1 # bis zum ende des blocks }
2013-07-23T17:23:37 RatteKann mir den einer den unterschied zwischen <> und sagen?
2013-07-23T17:23:37 RatteFrage nr3.
eine Linux frage.. wohl albern aber ich kriegs nicht gebacken.
im meinem tollen büchlein und auch im netz steht das ich mein programm so ausführen kann:
$ ./mein_programm vorher eventuell noch $ chmod a+x mein_programm (hiernach sagt er mir das er das verzeichniss nicht findet. aber es wurde so geschrieben das man doch keinen pfad davor setzten muss (wie auch immer das dann laufen soll..))
das haut schonmal nicht hin.
dann hab ich probiert $ chmod a+x /pfad/pfad/pfad/mein_programm (in dem fall hat der das verzeichniss logischerweise gefunden aber nix weiter gesagt) will ich dann das programm wie beschrieben ausführen so $ ./pfad/pfad/pfad/mein_programm oder so $ ./mein_programm passiert nichts. erst war mir das wurscht ich hab dann halt die programme mit
$ perl /pfad/pfad/pfad/mein_programm ausgeführt. das hat immer geklappt. aber jetzt bin ich grad bei sachen wie
und dann soll wieder $ ./mein_programm eingegeben werden um line für line aus dem programm auszugeben.
das haut nicht hin weil ich irgendwas falsch mache mit dieser einfachen eingabe. was mach ich falsch das er das programm nicht öffnen will? ich benutze grade ubuntu falls es wichtig ist.
1 2 3 4 5 6
sub total { my @numbers = @_; # nun addiere alle zahlen in @numbers ... return $sum; # summe zurückliefern }
2013-07-23T17:23:37 RatteLetzte frage ist nicht so wichtig:
es geht um eine aufgabe aus dem buch wo ich die frage nicht verstehe. ich weiß nicht was verlangt wird:
Write a subroutine, called &total, which returns the total of a list of numbers. Hint: the subroutine should not perform any I/O; it should simply process its parameters and return a value to its caller. Try it out in this sample program, which merely exercises the subroutine to see that it works. The first group of numbers should add up to 25.
Code (perl): (dl )1 2 3 4 5 6my @fred = qw{ 1 3 5 7 9 }; my $fred_total = &total(@fred); print "The total of \@fred is $fred_total.\n"; print "Enter some numbers on separate lines: "; my $user_total = &total(); print "The total of those numbers is $user_total.\n";
2013-07-23T20:56:43 RaubtierSubs ruft man (seit mehr als einem Jahrzehnt schon!) nicht mehr mit einem & auf (jedenfalls nicht normalerweise).
2013-07-23T21:54:32 pq- es umgeht eventuell definierte prototypen
- ohne parameter, also &subname wird das aktuelle @_ als parameter übergeben (falls man sich schon in einer sub befindet).
beides nebeneffekte, die fallen sein können.
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
#!/usr/bin/perl use warnings; use strict; sub a { @_ = qw(a b c); print "1\n"; &b; print "2\n"; &b(); print "3\n"; b(); print "4\n"; no strict; b; } sub b { foreach (@_) { print "$_\n"; } } a();
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
#!/usr/bin/perl use warnings; use strict; package MyClass; sub new { my $classname = shift; my $self = {}; return bless($self, $classname); } sub myMethod { my $self = shift; print "Hallo\n"; } package main; my $object = MyClass -> new(); $object -> myMethod(); # Geht nicht: # $object -> &myMethod();
2013-07-23T17:23:37 RatteFrage nr3.
eine Linux frage.. wohl albern aber ich kriegs nicht gebacken.
im meinem tollen büchlein und auch im netz steht das ich mein programm so ausführen kann:
$ ./mein_programm vorher eventuell noch $ chmod a+x mein_programm (hiernach sagt er mir das er das verzeichniss nicht findet. aber es wurde so geschrieben das man doch keinen pfad davor setzten muss (wie auch immer das dann laufen soll..))
das haut schonmal nicht hin.
2013-07-23T17:23:37 Rattedann hab ich probiert $ chmod a+x /pfad/pfad/pfad/mein_programm (in dem fall hat der das verzeichniss logischerweise gefunden aber nix weiter gesagt)
2013-07-23T17:23:37 Rattewill ich dann das programm wie beschrieben ausführen so $ ./pfad/pfad/pfad/mein_programm oder so $ ./mein_programm passiert nichts.
2013-07-23T17:23:37 Ratteerst war mir das wurscht ich hab dann halt die programme mit
$ perl /pfad/pfad/pfad/mein_programm ausgeführt. das hat immer geklappt.
2013-07-23T17:23:37 Ratteaber jetzt bin ich grad bei sachen wie
und dann soll wieder $ ./mein_programm eingegeben werden um line für line aus dem programm auszugeben.
das haut nicht hin weil ich irgendwas falsch mache mit dieser einfachen eingabe. was mach ich falsch das er das programm nicht öffnen will? ich benutze grade ubuntu falls es wichtig ist.
2013-07-23T18:22:47 pqdu kannst ein perl-skript so aufrufen:
perl skript.pl
dafür muss es dann nicht ausführbar sein.
wenn du es ausführbar machst, kannst du es auch so aufrufen:
./skript.pl
dafür muss aber dann die "shebang", die erste zeile stimmen und auf den perl-interpreter zeigen.
normalerweise also so:
in dem fall wird dann das skript mit /usr/bin/perl aufgerufen.
manchmal aber auch /usr/local/bin/perl oder was anderes.
im zweifelsfall unter linux rausfinden mit which perl z.b.
2013-07-24T06:01:43 Linuxer2013-07-23T17:23:37 Rattewill ich dann das programm wie beschrieben ausführen so $ ./pfad/pfad/pfad/mein_programm oder so $ ./mein_programm passiert nichts.
Das ist nur schwer zu glauben, dass da gar nichts passierte. Kam noch nicht mal eine Fehlermeldung, die behauptete, dass die Datei nicht gefunden wurde?
2013-07-23T17:23:37 Ratteerst war mir das wurscht ich hab dann halt die programme mit
$ perl /pfad/pfad/pfad/mein_programm ausgeführt. das hat immer geklappt.
Da scheint Verwirrung zu herrschen. Ein ./pfad/pfad/pfad/mein_programm ist nicht mit einem perl /pfad/pfad/pfad/mein_programm zu vergleichen! Das erste sucht ein "mein_programm", das vom aktuellen Verzeichnis ausgehend (beachte den Punkt am Anfang des Pfades!), unter pfad/pfad/pfad/ liegen sollte.
Das zweite sucht vom Wurzelverzeichnis ausgehend (beachte, dass hier KEIN Punkt am Anfang des Pfades steht)...
In der Regel befindet man sich selten im Wurzelverzeichnis "/"...
2013-07-23T17:23:37 Ratteaber jetzt bin ich grad bei sachen wie
und dann soll wieder $ ./mein_programm eingegeben werden um line für line aus dem programm auszugeben.
das haut nicht hin weil ich irgendwas falsch mache mit dieser einfachen eingabe. was mach ich falsch das er das programm nicht öffnen will? ich benutze grade ubuntu falls es wichtig ist.
Leider verrätst Du nicht, was "das haut nicht" bei Dir konkret bedeutet.
Was passiert denn, wenn Du ein Skript mit dem Code ausführst?
Kriegst Du eine Fehlermeldung? Wenn ja, welche?
Liefer doch bittte mal Informationen...
2013-07-23T20:56:43 RaubtierWirf das Buch weg. Subs ruft man (seit mehr als einem Jahrzehnt schon!) nicht mehr mit einem & auf (jedenfalls nicht normalerweise). Es gibt moderne und gute Perl-Tutorials, schau dich mal hier in der FAQ um oder gucke auf http://perl-tutorial.org/
2013-07-23T18:18:06 pq2013-07-23T17:23:37 RatteKann mir den einer den unterschied zwischen <> und sagen?
unterschied zwischen <> und was? ist da beim posten was verlorengegangen? meintest du readline?
2013-07-23T17:53:15 lichtkinddu meinst sicher http://www.amazon.de/Perl-Das-Einsteigerseminar-Ri... . gebraucht für 3 cent - alles gesagt.
2013-07-26T15:17:08 Ratte
2013-07-26T15:17:08 Ratte...
Die bücher werden aber nicht weggeschmissen.. meine helfer im bekanntenkreis sind alles alte perl gurus die auf diese bücherreihe für den anfang mit perl schwören. die zeigen mir den vogel wenn ich sage ich lerne jetzt über internet tutorials ohne bücher und lehrgänge. Die sind recht konservativ was das lernen angeht.
2013-07-26T15:17:08 Ratteund schaden werden die 3 dinger (learning perl,intermediate perl,mastering perl) wohl nicht.
2013-07-23T17:23:37 Ratte...
und dann soll wieder $ ./mein_programm eingegeben werden um line für line aus dem programm auszugeben.
...