Nicht nur in eingabeauforderung, sondern in datei

Hallo zusammen,
ich habe nun folgendes Problem. Mein Program soll die Anzahl der logfiles in einer Datei zählen und die Namen in der Datei enthaltenen files.log ausgeben. In der Eingabeaufforderung funktioniert es einwandfrei. Das Programm schreibt aber in die Datei files.log nur die anzahl der Files rein, aber nicht die Namen der Files.
Was habe ich falsch gemacht?

Hier ist der Code

#!/usr/bin/perl

open (out,"\>files.log");

# $directory = "C:\Bernd\testfile";
# chdir("C:\Bernd\testfile");
opendir(DIR,"C:\\temp") or die "Can't open directory: $!";
# @a=readdir(DIR);
# my @Eintraege = grep( !/^\.\.?$/, readdir(DIR));
my @Eintraege = grep( /\.log$/ , readdir(DIR));
closedir(DIR);

# chdir("C:\testfile");
my $anzahleintraege = @Eintraege;
print(out"Anzahl Files in " .$anzahleintraege. "\n");
print (out @Eintraege. "\n");
print "Anzahl Files ist " .$anzahleintraege ;
print (@Eintraege);
#print join(out,@Eintraege);
# print join(" ",@a);

[MOD]: code- in pre-tags umgewandelt

Hallo,

#!/usr/bin/perl

open (out,">files.log");

$directory = „C:\Bernd\testfile“;

chdir(„C:\Bernd\testfile“);

opendir(DIR,„C:\temp“) or die „Can’t open directory: $!“;

@a=readdir(DIR);

my @Eintraege = grep( !/^..?$/, readdir(DIR));

my @Eintraege = grep( /.log$/ , readdir(DIR));
closedir(DIR);

Den Spass kannst du auch kuerzer als

my @Eintraege = glob "C:\\temp\\*.log";

schreiben (bekommst aber im Falle eines Fehlers keine so schoene Fehlermeldung mehr).

chdir(„C:\testfile“);

my $anzahleintraege = @Eintraege;
print(out"Anzahl Files in " .$anzahleintraege. „\n“);
print (out @Eintraege. „\n“);

Wenn du @Eintraege . „\n“ schreibst, setzt du @Eintraege in den skalaren Kontext, das ergibt die Anzahl der Eintraege. Wenn du statt des Punktes ein Komma schreibst sollte es gehen.

Gruesse,
Moritz

Es funktioniert, funktioniert…:wink:)
supi, vielen vielen Dank…:wink:))

Hallo,

jedoch ich habe ich noch ein kleines Problem. Das Programm schreibt mir zwar alle Werte des Array ain die Datei Files.log rein, aber alles in einer Zeile. Wie schaffe ich es, dass Sie untereinander ausgegeben werden.

Hier mein leicht veränderter Code

#!/usr/bin/perl

open (out,"\>files.log");

# $directory = "C:\Bernd\testfile";
# chdir("C:\Bernd\testfile");
opendir(DIR,"C:\\temp") or die "Can't open directory: $!";
# @a=readdir(DIR);
# my @Eintraege = grep( !/^\.\.?$/, readdir(DIR));
my @Eintraege = grep( /\.log$/ , readdir(DIR));
closedir(DIR);

# chdir("C:\testfile");
my $anzahleintraege = @Eintraege;
print(out"Anzahl Files in " .$anzahleintraege. "\n");
print (out @Eintraege,"\n");
print "Anzahl Files ist " .$anzahleintraege ;
print (@Eintraege);
#print join(out,@Eintraege);
# print join(" ",@a);

Hallo,

jedoch ich habe ich noch ein kleines Problem. Das Programm
schreibt mir zwar alle Werte des Array ain die Datei Files.log
rein, aber alles in einer Zeile. Wie schaffe ich es, dass Sie
untereinander ausgegeben werden.

siehe: „$,“ in http://perldoc.perl.org/perlvar.html

IO::Handle->output_field_separator EXPR

$OUTPUT_FIELD_SEPARATOR

$OFS

$,

Beispiel:

...

my $dir = 'c:/temp';
opendir my $dh, $dir or die "can't open directory: $!";
my @Eintraege = grep /\.log$/, readdir $dh;
closedir $dh;

my $heading = "Anzahl Files in $dir: " . @Eintraege; # @Eintraege =\> scalar

local $, = "\n"; # set output field separator for print to \n

open my $out ,'\>', 'files.log' or die "can't write: $!";
print $out $heading, @Eintraege;
close $out;

print $heading, @Eintraege;

...

Grüße

CMБ