Schrift
[thread]12187[/thread]

Problem mit File::Find unter Windows (Seite 2)

Leser: 5


<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
Alter
 2008-07-16 20:15
#112218 #112218
User since
2008-02-27
67 Artikel
BenutzerIn
[default_avatar]
moritz+2008-07-16 15:54:32--
Das ist ein Syntaxfehler. 'c:\\' eher.


wieso????
The only way to survive! Before and after the year 2000, 3000, 4000, ... and tomorrow, too! Linux forever
GwenDragon
 2008-07-16 20:27
#112220 #112220
User since
2005-01-17
14848 Artikel
Admin1
[Homepage]
user image
Um diesen ganzen Ärger mit den seltsamen Trennern und den daraus resultierenden Escapeorgien zu umgehen, solltest du eher CPAN:File::Basename bzw. CPAN:File::Spec nehmen zum Zusammebasteln von Pfaden.
moritz
 2008-07-16 22:22
#112224 #112224
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Alter+2008-07-16 18:15:06--
moritz+2008-07-16 15:54:32--
Das ist ein Syntaxfehler. 'c:\\' eher.


wieso????


Code: (dl )
1
2
$ perl -wle "print 'C:\'"
Can't find string terminator "'" anywhere before EOF at -e line 1.
murphy
 2008-07-16 22:38
#112225 #112225
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
moritz+2008-07-16 20:22:16--
Alter+2008-07-16 18:15:06--
moritz+2008-07-16 15:54:32--
Das ist ein Syntaxfehler. 'c:\\' eher.


wieso????


Code: (dl )
1
2
$ perl -wle "print 'C:\'"
Can't find string terminator "'" anywhere before EOF at -e line 1.


Vorsicht! Nicht Perls Quotingregeln mit denen der Shell verwechseln! Wenn im Perlquellcode
Code (perl): (dl )
print 'C:\';
steht, ist das korrekt, aber wenn man an der Kommandozeile perl -wle "print 'C:\'" eingibt, kommt etwas anderes bei Perl an. Richtig wäre in dem Falle zum Beispiel perl -wle "print 'C:\\\'" bei der zsh oder perl -wle "print 'C:\\'" bei der bash.
When C++ is your hammer, every problem looks like your thumb.
betterworld
 2008-07-17 05:38
#112233 #112233
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote="murphy+2008-07-16 20:38:27--"]
moritz+2008-07-16 20:22:16--
Wenn im Perlquellcode
Code (perl): (dl )
print 'C:\';
steht, ist das korrekt

Echt?
Code: (dl )
1
2
3
4
% perl
print 'C:\';
^D
Can't find string terminator "'" anywhere before EOF at - line 1.

Beachte: 'Can\'t stop ravin\'' ist der String Can't stop ravin', d.h. ein escapetes Quote beendet den String nicht.
(Und Du hast recht, das sollte man nicht verwechseln mit der Shell, denn da werden Backslashes in Single Quotes nicht speziell behandelt. (Jedenfalls in bash. In zsh scheint es anders zu sein. (Windows-Eingabezeile ist wieder wohl eine ganz andere Geschichte.)))


GwenDragon+2008-07-16 18:27:43--
Um diesen ganzen Ärger mit den seltsamen Trennern und den daraus resultierenden Escapeorgien zu umgehen, solltest du eher CPAN:File::Basename bzw. CPAN:File::Spec nehmen zum Zusammebasteln von Pfaden.

Ich finde Path::Class auch sehr cool.
moritz
 2008-07-17 10:20
#112237 #112237
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
murphy+2008-07-16 20:38:27--
Vorsicht! Nicht Perls Quotingregeln mit denen der Shell verwechseln! Wenn im Perlquellcode
Code (perl): (dl )
print 'C:\';
steht, ist das korrekt, aber wenn man an der Kommandozeile perl -wle "print 'C:\'" eingibt, kommt etwas anderes bei Perl an. Richtig wäre in dem Falle zum Beispiel perl -wle "print 'C:\\\'" bei der zsh oder perl -wle "print 'C:\\'" bei der bash.


Sach mal, probierst das Zeugs eigentlich aus bevor du das schreibst? Wenn nicht solltest du schleunigst damit anfangen (zumindest wenn du anderen widersprichst).
murphy
 2008-07-17 16:47
#112253 #112253
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
moritz+2008-07-17 08:20:14--
murphy+2008-07-16 20:38:27--
Vorsicht! Nicht Perls Quotingregeln mit denen der Shell verwechseln! Wenn im Perlquellcode
Code (perl): (dl )
print 'C:\';
steht, ist das korrekt, aber wenn man an der Kommandozeile perl -wle "print 'C:\'" eingibt, kommt etwas anderes bei Perl an. Richtig wäre in dem Falle zum Beispiel perl -wle "print 'C:\\\'" bei der zsh oder perl -wle "print 'C:\\'" bei der bash.


Sach mal, probierst das Zeugs eigentlich aus bevor du das schreibst? Wenn nicht solltest du schleunigst damit anfangen (zumindest wenn du anderen widersprichst).


Ich habe es gerade noch einmal getestet und bei mir funktionieren die Shellkommandos – allerdings habe ich beim zweiten Nachprüfen festgestellt, dass Ihr wohl recht habt und print 'C:\'; in Perl nicht korrekt ist. Da sind vielleicht merkwürdige Shellversionen unter MacOS X schuld. Jedenfalls blicke ich selber nicht mehr so ganz durch, was da von der Shell an Perl weitergegeben wird, da bei beiden Kommandos print 'C:\' herauskommt, wenn ich den Aufruf von Perl durch echo ersetze :-(

Auf jeden Fall zeigt es, dass man mit der Eingabe von Perl-Einzeilern an der Shell vorsichtig sein muss, weil man zwei Sätze von Quotingregeln miteinander mischt.
When C++ is your hammer, every problem looks like your thumb.
Struppi
 2008-07-18 02:56
#112289 #112289
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Du hast das my bei dem $dir vergessen, sonst nichts.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;
use warnings;
use File::Find;

my $dir = "c:/";
my @files;
# finde alle Dateien mit der Erweiterung
my $muster = '.tmp';

find(\&edits, $dir);

sub edits() {
    if ( $File::Find::name =~ /^$muster$/ ) {
        push(@files, $_);
    return;
}
print "@files";
Alter
 2008-07-18 10:33
#112291 #112291
User since
2008-02-27
67 Artikel
BenutzerIn
[default_avatar]
ach du schande....stimmt.....da reden wir und reden und sowas sieht man nicht.....zeugt nicht von ausmerksamkeit...:-(
The only way to survive! Before and after the year 2000, 3000, 4000, ... and tomorrow, too! Linux forever
Struppi
 2008-07-18 12:05
#112294 #112294
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
hat nepos eigentlich schon gesagt.

Aber das mit dem Backslash ist eine unnötige Diskussion gewesen, Perl arbeitet immer mit einem Slash als Pfadtrenner, du brauchst die Systemspezifischen normalerweise nicht
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2008-07-15 22:41.