Schrift
[thread]6993[/thread]

aktuelles Verzeichnis (Seite 3)

Leser: 2


<< |< 1 2 3 4 5 >| >> 44 Einträge, 5 Seiten
J-jayz-Z
 2005-05-16 21:18
#54908 #54908
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ach, nochwas an Dubu:
das pwd am Anfang stand in "Backticks". Das heißt es führt das system command pwd aus, das unter Linux/unix das aktuelle Verzeichniss zurückgibt. Und das _sollte_ dann in einer Variablen gespeichert werden. Und wenn ich "." öffne, wird nicht das aktuelle Verzeichniss geöffnet, sondern das Verzeichniss, in dem das script liegt...

Das mit dem
Code: (dl )
1
2
3
if (! getopts('f:hd:'))
{
}

hat sich erledigt, ich habe getopts vorher vergessen zu machen...
Es muss deshalb gemacht werden, damit das script auch weiß, nach welcehm Schalter eine Eingabe erwartet wird...
Der Schalter -d /path/to/dir/ geht immer noch nicht. Aber wenn es kein verzeichniss ist, gibt es ordnungsgemäß eine Fehleremldung aus... :(
Niemand ne idee?
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
renee
 2005-05-16 21:54
#54909 #54909
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du machst das aber relativ umständlich... Warum benutzt Du keinen Hash??

Also folgendes funktioniert bei mir einwandfrei:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#! /usr/bin/perl

use strict;
use warnings;
use Getopt::Std;
use Data::Dumper;

my %opts;
getopts('f:hd:',\%opts);

print Dumper(\%opts);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2005-05-16 22:00
#54910 #54910
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und Du solltest mehr Fehler abfangen...

Stichwort:
Code: (dl )
opendir(DIR,$dir) or die $!;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pKai
 2005-05-16 22:21
#54911 #54911
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
[quote=J-jayz-Z,16.May.2005, 17:58]Use of uninitialized value in hash element at ./filesize.pl line 84.[/quote]
$_ sind Dateinamen. Wenn du dann -s $_ machst würde sich das auf gleichnamige Dateien im Cwd beziehen. $_ liegt aber im Verzeichnis $dir daher gibt -s undef zurück ...
I sense a soul in search of answers.
J-jayz-Z
 2005-05-16 22:24
#54912 #54912
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich bekomm trotz hash und die "$!"; folgendes:
Code: (dl )
1
2
3
4
5
rootcris@ingo:~/scripts$ ./filesize.pl -d /home/rootcris/filme/
Use of uninitialized value in hash element at ./filesize.pl line 82.
Use of uninitialized value in sort at ./filesize.pl line 86.
Use of uninitialized value in sort at ./filesize.pl line 86.
Use of uninitialized value in hash element at ./filesize.pl line 91.

Zeile 82:
Code: (dl )
$for{$file} = $_;

Zeile 86:
Code: (dl )
my @sort = sort { $a <=> $b } @size;

Zeile 91:
Code: (dl )
if (-f "$for{$_}")

Da muss irgendwas mit dem hash nicht stimmen,wenn -d ein Verzeichniss ist... :(
Hat da keiner ne idee? Ich denke mal, es hat etwas damit zu tun:
Code: (dl )
$hash{$_} = (-s $_);

Nur wieso geht es bei dem normalen Aufruf und bei -d nicht?
Ich bin voll am Verzweifeln... :rock:
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
pKai
 2005-05-16 22:37
#54913 #54913
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Ich denke, du hattest meinen vorherigen Post noch nicht gesehen, als du zuletzt postetes.
Die Meldungen rühren von den undef-Werten, die als Hash-key verwendet werden (s.o.).
Hinweis, wie man herausfindet, was perl einem mit seinen Meldungen sagen will und man ansonsten keinen Plan hat:
Programm im Debugger zu der bewussten Stelle laufen lassen und sich die in der Zeile verwendeten Variablen (deren Inhalte) anschauen. Alternativ sich die Werte einfach per print (evtl. print STDERR) auf die Konsole ausgeben lassen. Das bringt einen oft schon weiter. In diesem Fall sieht man, dass $file undef ist, was noch nicht die Lösung aber ein guter Hinweis ist.
I sense a soul in search of answers.
Dubu
 2005-05-16 22:45
#54914 #54914
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=J-jayz-Z,16.05.2005, 19:18]das pwd am Anfang stand in "Backticks".
[/quote]
Noe, es stand in einfachen Anfuehrungszeichen und tut es immer noch, siehe 4. Beitrag in diesem Thread. Deshalb ja meine Anmerkung.

Quote
Und wenn ich "." öffne, wird nicht das aktuelle Verzeichniss geöffnet, sondern das Verzeichniss, in dem das script liegt...

Das ist definitiv falshc, "." ist immer das aktuelle Verzeichnis.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
~/test/foo/bar> touch bla
~/test/foo/bar> ls -a
.  ..  bla
~/test/foo/bar> cat > ~/perl/test/opendirtest.pl
#!/usr/bin/perl -l
opendir DIR, '.' or die $!;
print for readdir DIR;
~/test/foo/bar> chmod +x ~/perl/test/opendirtest.pl
~/test/foo/bar> ~/perl/test/opendirtest.pl
.
..
bla


Quote
Das mit dem
Code: (dl )
1
2
3
if (! getopts('f:hd:'))
{
}

hat sich erledigt, ich habe getopts vorher vergessen zu machen...

???

Quote
Es muss deshalb gemacht werden, damit das script auch weiß, nach welcehm Schalter eine Eingabe erwartet wird...

Der Aufruf von getopts() macht die Auswertung der Kommandozeilenoptionen und die Zuweisung an die $opt_* Variablen (bzw. den Hash, wenn benutzt). Nur ein "use Getopt::Std" macht gar nix.

Der Aufruf von getopts() liefert uebrigens nur dann ein false zurueck, wenn eine nicht definierte Option vorkommt oder ein Parameter vom falshcen Typ ist. Kein Optionen zu benutzen ist kein Fehler.

Quote
Der Schalter -d /path/to/dir/ geht immer noch nicht.

Dazu hat dir pKai ja schon die Erklaerung geliefert.

Quote
Aber wenn es kein verzeichniss ist, gibt es ordnungsgemäß eine Fehleremldung aus... :(

Und bitte: Verzeichnis nur mit einem 's'. ;)
pKai
 2005-05-16 22:48
#54915 #54915
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Die Warnungen verschwinden, wenn du die Dateigröße mit
Code: (dl )
       my $file = -s File::Spec->catfile($dir, $_);

bestimmst.
(zuvor use File::Spec; machen.)
Ausgabe erzeugt das Skript allerdings danach bei mir trotzdem nicht (habe ich jetzt nicht weiter untersucht).
Ich stimme meinen Vorrednern zu, dass der ganze Ansatz zu kompliziert ist.
I sense a soul in search of answers.
J-jayz-Z
 2005-05-16 22:49
#54916 #54916
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
ahh, ich hatte ihn wirklich nicht gelesen den Beitrag. thx!
Ich hab jetzt nur noch ein Problem. Wie kann ich das machen?
Mein Ansatz:
Code: (dl )
$_ = $dir$_ if($opts{d});

das in der foreach Schleife von @array.
So _sollte_ $_ dann ungefähr so aussehen:
Code: (dl )
/home/rootcris/filme/$_

Da bekomme ich allerdings folgende Fehlermeldung:
Code: (dl )
1
2
3
4
5
6
7
8
rootcris@ingo:~/scripts$ ./filesize.pl -d /home/rootcris/filme/
Scalar found where operator expected at ./filesize.pl line 80, near "$dir$_"
(Missing operator before $_?)
"my" variable @sort masks earlier declaration in same statement at ./filesize.pl line 89.
syntax error at ./filesize.pl line 80, near "$dir$_ "
syntax error at ./filesize.pl line 82, near ");"
Can't use global $_ in "my" at ./filesize.pl line 92, near "{$_"
Execution of ./filesize.pl aborted due to compilation errors.

Jemand ne bessere Idee, die funktioniert? :(
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
J-jayz-Z
 2005-05-16 22:57
#54917 #54917
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Es war eine total simple Lösung!
Einfach ein :
Code: (dl )
1
2
3
4
if ($opts{d})
{
chdir $dir;
}

thx für eure Hilfe! ! !
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
<< |< 1 2 3 4 5 >| >> 44 Einträge, 5 Seiten



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