Ich möchte in nur einer Zeile übereinstimmen und einer Variable zuweisen:
my $abspath='/var/ftp/path/to/file.txt';
$abspath =~ #/var/ftp/(.*)$#;
my $relpath=$1;
Ich bin mir sicher, es muss einfach sein.
Ich möchte in nur einer Zeile übereinstimmen und einer Variable zuweisen:
my $abspath='/var/ftp/path/to/file.txt';
$abspath =~ #/var/ftp/(.*)$#;
my $relpath=$1;
Ich bin mir sicher, es muss einfach sein.
Obligatorischer Clippy: "Hallo! Ich sehe, dass du Pfadmanipulation in Perl durchführst. Möchtest du stattdessen Path::Class verwenden?"
use Path::Class qw(file);
my $abspath = file '/var/ftp/path/to/file.txt';
my $relpath = $abspath->relative('/var/ftp');
# gibt "path/to/file.txt" im String-Kontext zurück
Sie können dies mit dem Match- und Ersetzungsoperator erreichen:
(my $relpath = $abspath ) =~ s#/var/ftp/(.*)#$1# ;
Dieser Code weist $abspath
$relpath
zu und wendet dann das Regex darauf an.
Bearbeiten: Qtax-Antwort ist eleganter, wenn Sie nur einfache Übereinstimmungen benötigen. Wenn Sie jemals komplexe Ersetzungen benötigen (wie ich normalerweise), verwenden Sie einfach meinen Ausdruck.
Mit Perl 5.14 können Sie auch den /r
(nicht destruktiven Substitutions-) Modifikator verwenden:
perl -E'my $abspath="/var/ftp/path/to/file.txt"; \
my $relpath= $abspath=~ s{/var/ftp/}{}r; \
say "abspath: $abspath - relpath: $relpath"'
Weitere Beispiele finden Sie unter "Neue Funktionen von Perl 5.14: Nicht-destruktive Substitution".
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.