Thread Subroutine & Arrays: Funktion zur Arrayerzeugung (11 answers)
Opened by Kristop8 at 2005-10-17 15:57

Strat
 2005-10-17 19:36
#58941 #58941
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
1. was kommen denn fuer fehler, wenn du die $directory-Zeilen nicht auskommentierst? Ohne Fehlermeldung ist es ziemlich schwer, dir zu helfen.

2. $directory =~ s!\\!/!g; ersetzt in $directory alle \ durch /

3. $directory =~ s!/$!!; ersetzt am Ende ($) von Directory den / durch nichts, also wirft den Slash am Ende weg (esskar verwendet anstelle des "ueblichen" Separators fuer regulaere Ausdruecke / einfach ! , damit er den / im Ersetzungsteil nicht escapen muss. aber da koennte genausogut $directory =~ s/\/$//; stehen.

4. opendir (DIR, $dir) ... geht natuerlich; allerdings kann man z.B. DIR nur unschoen an Subroutinen uebergeben. Bei neueren Perl-Versionen (ich glaube, ab perl5) kann man anstelle des FH-Globs auch eine ganz normale variable verwenden, also opendir($dir, $directory); und da $dir das erste Mal vorkommt, deklariert sie esskar gleich mit my.

5. push @{$arrayref}, $path; da hast du recht

Mal eine Frage: wieso willst du die Dateien in separaten Arrays haben? da bekommst du probleme mit der erweiterbarkeit deines scriptes (wenn ein neues verzeichnis hinzukommt, musst du ein neues array erstellen, oder mit mehrdimensionalen Arrays arbeiten; aber auch dort musst du dir vermutlich merken, von wo die Dateien kommen).

Ist es nicht einfacher, alleDateiname inkl. Pfad in einem grossen Array zu speichern und dann damit zu arbeiten? Wenn du sowas willst, hilft dir vielleicht das Modul File::Find weiter, z.B.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#! /usr/bin/perl
use strict;
use warnings;
use File::Find;

my $dir = "c:/test";
my @files = ();
find (sub {
if (-f $_) {
push (@files, $File::Find::name);
}
}, $dir);

foreach my $file (sort @files) {
print "Datei: $file\n";
} # foreach


Lesematerial:
perldoc File::Find
perldoc -f -f
(einfach in die Shell eingeben, und abwarten, was passiert)\n\n

<!--EDIT|Strat|1129563413-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread Subroutine & Arrays: Funktion zur Arrayerzeugung