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

aktuelles Verzeichnis

Leser: 2


<< |< 1 2 3 4 5 >| >> 44 Einträge, 5 Seiten
J-jayz-Z
 2005-05-15 02:55
#54888 #54888
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi, ist es möglich, das Verzeichnis herauszufinden, in dem das script ausgeführt wird? Also nicht das, in dem es liegt, das ist ja ./ sondern in dem, indem der User das script laufen läßt.

s~Verzeichniss~Verzeichnis~ for $beitrag, $threadtitel;\n\n

<!--EDIT|Crian|1116334383-->
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-15 03:16
#54889 #54889
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
my $cwd = $^O eq 'MSWin32' ? 'cd' : 'pwd';
print qx{$cwd};
I sense a soul in search of answers.
Dubu
 2005-05-15 03:31
#54890 #54890
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Oder direkt BS-unabhaengig mit einem mitgelieferten Modul:
perldoc Cwd
J-jayz-Z
 2005-05-15 03:32
#54891 #54891
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Jo, sowas dachte ich mir auch... aber ich wollte das Verzeichniss mit opendir einlesen, etwa so:
Code: (dl )
1
2
3
4
my $dir = 'pwd';
opendir(FILE, "$dir");
my @file = readdir(FILE);
closedir(FILE);

die $dir Variable hat den richtigen Wert, aber odendir macht mir das Ding nicht auf...
Woran kann das liegen? ? ?
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-15 04:19
#54892 #54892
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
[quote=Dubu,15.May.2005, 01:31]perldoc Cwd[/quote]
Ich wusste, da war was. Konnte mich nur an den Namen nicht erinnern ;)

Folgendes funktioniert bei mir problemlos:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use strict;
use warnings;
use Cwd;

my $dir = cwd;

opendir (DIR, $dir) || die $!;
my @files = readdir (DIR);
closedir (DIR);

{
local ($\,$,) = ($/, $/);
print @files;
}
I sense a soul in search of answers.
Dubu
 2005-05-15 04:22
#54893 #54893
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
1.) Frag opendir() doch einfach: opendir (DIR, $dir) or die $!

2.) Ach ja: Wieso heisst das Verzeichnis, das du oeffnest jetzt 'pwd'? Ich dachte, du wolltest das aktuelle Verzeichnis oeffnen?

3.) Waere es dann nicht einfacher, opendir (DIR, '.') zu nehmen, d.h. Punkt fuer das aktuelle Verzeichnis? (Portabel zwischen Windows und Unix/Linux ist das auch.)

4.) Man koennte auch my @files = glob('*') oder my @files = glob('* .*') nehmen.
J-jayz-Z
 2005-05-15 04:25
#54894 #54894
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
thx @ Dubu, mit Cwd geht es!
Aber noch etwas. Mein Programm kann etwas länger sein, wie das Terminal. Ich hätte gerne eine reaktion des Programmes, wie wenn ich es so aufrufen würde:
Code: (dl )
./prog.pl | less

also das ich, wenn es nicht ganz auf das Terminal passt, ganz bequem mit den Pfeiltasten nach unten "scrollen" kann.
Ist das machbar? ? ?
P.S.: Ich nutze format
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-15 17:28
#54895 #54895
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich habe hier ein Verständnissproblem und finde den Fehler nicht...
Ich will eine Liste des aktuellen Verzeichnisses ausgeben lassen, mit größe und Dateiname.
Dies allerdings nach der größe sortiert.
Hier ist meine Idee, ich bekomme aber
Code: (dl )
1
2
3
4
5
6
Argument "." isn't numeric in sort at ./filesize2.pl line 36.
Argument ".." isn't numeric in sort at ./filesize2.pl line 36.
Argument "filesize2.pl" isn't numeric in sort at ./filesize2.pl line 36.
Argument "make_index.pl" isn't numeric in sort at ./filesize2.pl line 36.
Argument "lol.htm" isn't numeric in sort at ./filesize2.pl line 36.
Argument "omake.cpp" isn't numeric in sort at ./filesize2.pl line 36.
und so weiter...
Kann mir da vielleicht jemand helfen?
Mein Code:
Code: (dl )
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/perl
use strict;
use warnings;

use Cwd;

my $dir = getcwd;
my %sizeindex;
my %fileindex;
my @sort;
my $o;
my @size;

opendir(FILE, "$dir");
my @file = readdir(FILE);
closedir(FILE);


foreach(@file)
{
my $size = (-s, "$_");
push @size, $size;

$sizeindex{$_} = $size;
}

foreach(@size)
{
my $i = 0;
$fileindex{$i}=$sizeindex{$file[$i]};
$i++;
}

my $main = @file;

@sort = sort { $a <=> $b } @size;

format STDOUT_TOP =
Dateiname Dateigroesse
====================================
.

for($o = 0; $o == $main; $o = $o + 1)
{
if (-f "$_")
{
my $i = 0;
if ($size[$i] < 1024)
{
$size[$i] .= " bytes";
} elsif ( $size[$i] > 1024 && $size[$i] < 1048576)
{
$size[$i] = sprintf("%.2f", $size[$i] / 1024);
$size[$i] .= " kb";
} elsif ( $size[$i] > 1048576 && $size[$i] < 1099511627776)
{
$size[$i] = sprintf("%.2f", $size[$i] / 1048576);
$size[$i] .= " mb";
} else
{
$size[$i] = sprintf("%.2f", $size[$i] / 1099511627776);
$size[$i] .= " gb";
}
format STDOUT =
@<<<<<<<<<<<<<<<<< @>>>>>>>>>>>>>>
$fileindex{$i}, $size[$i]
.
write;
$i++;
}
}

thx schonmal!
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
coax
 2005-05-15 18:34
#54896 #54896
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=J-jayz-Z,15.05.2005, 15:28]
Code: (dl )
my $size = (-s, "$_");
[/quote]
du meinst sicherlich
Code: (dl )
my $size = -s $_;

da -s ohne Argument ohnehin auf $_ angewendet wird kannst du auch einfach nur
Code: (dl )
my $size = -s;

schreiben.

In deinen Code hast du eine Liste (-s, $_), das entspricht (-s $_, $_) und da du es im skalaren Kontext aufrufst, also
Code: (dl )
my $size = (-s $_, $_);

wird $size der letzte Wert der Liste zugewiesen also einfach nur $_, im Listenkontext haettest du zwar den gewuenschten Effekt aber nicht auf den besten Weg erreicht
Code: (dl )
my($size) = (-s $_, $_);


Und "$_" ist ein DON'T, eine unnoetige Interpolation, es reicht $_ zu schreiben.

Grusz Christian.

edit: Noch etwas: Du solltest die Eintraege '.' und '..' ueberspringen, von denen moechtest du garantiert nicht die Groesze.
Code: (dl )
1
2
3
4
foreach (@files) {
   next if /^\.\.?$/;
   # ...
}
\n\n

<!--EDIT|coax|1116168595-->
,,Das perlt aber heute wieder...'' -- Dittsche
J-jayz-Z
 2005-05-15 18:57
#54897 #54897
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
ich hab sie übersprungen:
Code: (dl )
1
2
3
...
if (-f "$_")
...

ich will nämlich nur die Dateien. Ich hab das jetzt so geändert, wie du sagtest, nur eine Ausgabe bekomm ich so immer noch nicht. Diesmal bekomm ich erst gar keine Fehlermeldung. Ich bekomm einfach ne leere Ausgabe...
ist das
Code: (dl )
$fileindex{$i}=$sizeindex{$file[$i]};

überhaupt zulässig? ? ?
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.