"Jens H. Nielsen" <jens@ichiban.dk> wrote:
>
> Hej NG.
>
> Nedeståene kode virker hvis der er 2 backslashs ved hver
> backslash i $text. Men hvordan laver man en sådan TR kommando.
> Eller er der en nemere måde at få fat i fil navnet ?
Husk at perl stammer fra UNIX-verdenen, hvor man bruger tegnet
'\' som "escape"-tegn, dvs. det næste tegn har en speciel mening.
Hvis du for eksempel skal skrive et tabulator-tegn kan du skrive
'\t'. Det betyder samtidigt, at du skal skrive '\' to gange for
at få et enkelt.
Hvor kommer det filnavn egentlig fra? Husk at du i perl under
Windows kan skrive stier med enten '\\' eller '/'.
Nu til dit spørgsmål: En kortere måde kunne være:
$text = "G:\\images\\students\\thomas_anderson.jpg";
$text =~ s/.*\\//g;
'.*\\' fanger alle tegn, der efterfølges af et '\'. Det erstattes
så af 'ingenting'. Det sidste 'g' betyder at vi skal blive ved så
længe der er en match.
Se: 'perldoc perlop' under 's/PATTERN/REPLACEMENT/egimosx'.
Hvis du hellere vil skrive det portabelt, kan du i stedet bruge
standard-modulet "File::Basename":
use File::Basename;
$fullname = "G:\\images\\students\\thomas_anderson.jpg";
print "[$fullname]:\n";
($name,$path) = fileparse($fullname,'');
print "\t[$name] [$path]\n";
Se: 'perldoc File::Basename'.
Begge metoder er afprøvet og virker fint hos mig (ActiveState
Perl 5.6.1, build 629).
MVH, René
--
Using Virtual Access
http://www.vamail.com