Leser: 21
(\\)(\w.*)$
($datei = $pfad_und_datei) =~ s/^.*[\\\/]//g;
1 2 3 4
use File::Spec::Win32; my $path = q{ABCDEF\AB1010\datei.txt}; print $path; my $file = (File::Spec::Win32->splitpath($path))[-1];
1 2 3 4
use File::Spec; my $path = q{ABCDEF\AB1010\datei.txt}; print $path; my $file = (File::Spec->splitpath($path))[-1];
1
2
3
4
5
6
splitpath
Splits a path in to volume, directory, and filename portions. On systems with no concept of volume,
returns ’’ for volume.
($volume,$directories,$file) = File::Spec->splitpath( $path );
($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
2010-04-15T09:10:35 LinuxerWarum ist in Deinen Augen die Verwendung eines Core-Moduls "noch weniger portabel" als eine Regex-Lösung?
2010-04-15T09:27:46 pqund file-uploads sind ja ein spezialfall, beidem man nicht weiss, wie ein pfad aufgebaut ist.
2010-04-15T09:27:46 pqund file-uploads sind ja ein spezialfall, beidem man nicht weiss, wie ein pfad aufgebaut ist.
2010-04-14T14:18:15 pqweiss man nicht, von welchem system der pfad kommt, wie bei einem file-upload, ist es zumindest bei mir so, dass ich eh nur bestimmte dateinamen zulassen will, in dem fall arbeite ich sowieso mit regex.
1 2 3
use File::Basename; my $filename = basename( 'ABCDEF\AB1010\datei.txt' ); print $filename;
2010-04-14T13:33:02 pqnicht also unter unix mit windows-pfadangaben.
2010-04-14T13:40:28 biancaJa, mag sein.
QuoteUnd da die genannten Module nicht im Core zu sein scheinen wäre mir für eine solche Trivialität ein Modul zuviel. Geschmackssache.
2010-04-14T13:43:39 reneeKann vorkommen, wenn Du ein Datei-Uploadfeld in einem HTML-Formular hast und jemand mit dem IE Datei hochlädt. Der IE liefert da immer den ganzen Pfad (war zumindest bei älteren IEs so). Und das Skript liegt ja dann häufig auf einem Unix/Linux-Server.
2010-04-14T14:07:13 reneeJa, geht auch mit Regex. Meine Antwort war auf Deine Frage, wo denn Windows-Pfade unter Unix vorkommen können.
2010-04-14T13:24:26 PETER_PAN2009Er springt aber an den zweiten Backslash von hinten, was mache ich falsch?
1 2 3 4 5
use strict; use warnings; my $meinpfad = 'ABCDEF\AB1010\datei.txt'; my ($dateiname) = ( split(/\\/,$meinpfad) )[-1]; print "Dateiname von $meinpfad ist $dateiname", "\n";
2010-04-14T15:03:28 GwenDragonWarum verwendet niemand ein split, ein Regex ist da eigentlich nicht nötig?
1 2 3 4 5 6 7 8 9
#!/usr/bin/perl -w use strict; use warnings; foreach ('nur_datei_ohne_pfad.pdf','\\windows_pfad\\datei.pdf','linux_pfad/datei.pdf','') { print "\n\nBehandle $_ \n"; print "rindex: " . (substr $_,rindex($_,'\\')+1) . "\n"; (my $regex = $_) =~ s/^.*[\\\/]//g; print "regex : $regex\n"; }
2010-04-14T15:56:40 biancaBekäme man das auch so erweitert, dass auch Linux-Pfade erkannt werden?
Laut Doku gibt man bei rindex nur einen String zur Suche an, oder?
my $filename = (split /[\\\/]/, $path)[-1];
2010-04-14T17:59:21 esskarobwohl unter linux ein \ ein gültiger teil eines dateinamens ist.