Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6993[/thread]

aktuelles Verzeichnis (Seite 5)

Leser: 2


<< |< 1 2 3 4 5 >| >> 44 Einträge, 5 Seiten
Crian
 2005-05-18 18:55
#54928 #54928
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
np :)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Dubu
 2005-05-19 11:31
#54929 #54929
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=J-jayz-Z,18.05.2005, 16:19]Das passiert bei mir nur, wenn ich in /home/rootcris/ bin und das script mit scripts/filesize.pl aufrufe...[/quote]
Okay, auch dieser Code listet bei mir das aktuelle Verzeichnis und nicht das, in dem das Skript ist ... sei's drum.

Ein Anmerkung habe ich aber noch: Du benutzt zu viele Anfuehrungszeichen: Statt opendir(DIR, "$f") heisst es einfach opendir(DIR, $f) und statt if (-d "$opts{d}") schreibt man besser if (-d $opts{d}).

Ich nehme mal an, dass du vor Perl einige Shellprogrammierung gemacht hast. Das gleiche Problem hatte ich naemlich auch am Anfang.
Die Ursache: In der Shell muss man immer aufpassen, weil Variablen expandiert werden, bevor die Befehlszeile ausgefuehrt wird. Ein Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
$ dirname="foo bar"
$ cd $dirname
$ pwd
/foo
$ cd /
$ cd "$dirname"
$ pwd
/foo bar

Man sieht: Wenn ich cd $dirname ohne Anfuehrungszeichen schreibe, dann expandiert das zu cd foo bar, bevor das cd ausgefuehrt wird, und ich lande im falshcne Verzeichnis. Hier brauche ich Anfuehrungszeichen.

Perl dagegen ist hier eine "richtige" Programmiersprache und evaluiert die Syntax eines Terms, bevor die Variablen expandiert werden (ausser, natuerlich, in einem String-eval :)).

Die zusaetzlichen Anfuehrungszeichen kann man also in Perl getrost weglassen. Im Gegenteil, in Perl kann man damit eher Schaden anrichten, wenn man eine Interpolation als String erzwingt. Hier ein Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;

sub printref {
   print ${$_[0]};
}

my $foo = "abc";
my $fooref = \$foo;       # Referenz auf $foo

printref($fooref);        # liefert "abc"
printref("$fooref");      # liefert Warnung "Can't use string ("SCALAR(0x12345678)")
                          # as a SCALAR ref while "strict refs" in use at ..."


Auch bei Zahlen sind ueberfluessige Anfuehrungszeichen kontraproduktiv, weil Perl jedes Mal gezwungen wird, eine Stringdarstellung der Zahl zu erzeugen, diese zu verwenden und bei einer Rechnung wieder in eine Zahl zurueck zu wandeln. Dies kann meiner Ansicht nach auch zu Verlusten in der Rechengenauigkeit fuehren.
J-jayz-Z
 2005-05-19 12:54
#54930 #54930
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hmm, ich danke dir mal für deine Tipps Dubu. Du hast recht, ich habe vor Perl ein bißchen mit shellscript rumgespielt. Aber nie richtig programmiert. Beim Lesen von Koflers Linux bin ich über das Kapitel sh Programmierung gestoßen, hab mir das angeschaut und beschlossen, mit Programmierung mal anzufangen. Und dann hat mir ein Freund zu Perl geraten und da bin ich nun und mach meine Fehler :)
Danke auf jeden Fall für deine Tipps, wenn sonst noch irgendwas ist, was man an dem script zum positiven verändern könnte, wär ich froh drum, wenn es jemand schreiben könnte. Aus Fehlern lernt man... ;)
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Strat
 2005-05-19 15:01
#54931 #54931
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
formate sind manchmal recht fein, aber irgendwie ein ueberbleibsel aus dem ur-perl, das IMHO heute nirgendwo mehr dazupasst.
wenn ich spalten mit fixer satzlaenge schreiben will, helfen mir die funktionen (s)printf (schneidet zu lange nicht ab) oder pack (schneidet zu lange ab). Allerdings muss man sich um header selbst kuemmern

z.B.
Code: (dl )
print pack("A17 A1 A17", $name, " ", $wert), "\n";

oder
Code: (dl )
printf("%17s %17s\n", $name, $wert);
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 4 5 >| >> 44 Einträge, 5 Seiten



View all threads created 2005-05-15 02:55.