如何将perl中的字符串分成两部分
How to divide string in perl for 2 parts
所以我需要在 perl 中将我的字符串分成两部分。例如我有:
$string = "../dira/dirb/*.txt"
我想把它分成:
$stringA = "../dira/dirb"
$stringB = "*.txt"
但是如果我有:
$string = "dira/dirb/dirc/.../dirn/test.pl";
我想分:
$stringA = "dira/dirb/dirc/.../dirn"
$stringB = "test.pl"
有人知道我该怎么做吗?我尝试做类似的事情:
$howmany++ while $string =~ m/\//g;
所以我知道我有多少条斜线。但我不知道我能用这个做更多的事情:/
你可以试试这样:
$string =~ m|^(.*)/(.*)$|;
($stringA,$stringB) = (,);
print "stringA = $stringA\n";
print "stringB = $stringB\n";
= 编辑:=
限制为 stringB
的某些值:
if($string =~ m|^(.*)/(.*\.pl)$|) {
($stringA,$stringB) = (,);
print "stringA = $stringA\n";
print "stringB = $stringB\n";
}
使用Path::Tiny:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use Path::Tiny;
for my $path (qw( ../dira/dirb/*.txt
dira/dirb/dirc/.../dirn/test.pl
)) {
my $path_o = 'Path::Tiny'->new($path);
my $basename = $path_o->basename;
my $dirname = $path_o->dirname;
$dirname =~ s=/$==; # Remove the trailing slash.
say $basename, ' ', $dirname;
}
您可以使用File::Basename函数来解析文件路径:
#!/usr/bin/env perl
use strict;
use warnings;
use File::Basename;
my $string = "../dira/dirb/*.txt";
my $stringA = dirname($string);
my $stringB = basename($string);
printf "String A: %-25sString B: %s\n", $stringA, $stringB;
$string = "dira/dirb/dirc/.../dirn/test.pl";
$stringA = dirname($string);
$stringB = basename($string);
printf "String A: %-25sString B: %s\n", $stringA, $stringB;
所以我需要在 perl 中将我的字符串分成两部分。例如我有:
$string = "../dira/dirb/*.txt"
我想把它分成:
$stringA = "../dira/dirb"
$stringB = "*.txt"
但是如果我有:
$string = "dira/dirb/dirc/.../dirn/test.pl";
我想分:
$stringA = "dira/dirb/dirc/.../dirn"
$stringB = "test.pl"
有人知道我该怎么做吗?我尝试做类似的事情:
$howmany++ while $string =~ m/\//g;
所以我知道我有多少条斜线。但我不知道我能用这个做更多的事情:/
你可以试试这样:
$string =~ m|^(.*)/(.*)$|;
($stringA,$stringB) = (,);
print "stringA = $stringA\n";
print "stringB = $stringB\n";
= 编辑:=
限制为 stringB
的某些值:
if($string =~ m|^(.*)/(.*\.pl)$|) {
($stringA,$stringB) = (,);
print "stringA = $stringA\n";
print "stringB = $stringB\n";
}
使用Path::Tiny:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use Path::Tiny;
for my $path (qw( ../dira/dirb/*.txt
dira/dirb/dirc/.../dirn/test.pl
)) {
my $path_o = 'Path::Tiny'->new($path);
my $basename = $path_o->basename;
my $dirname = $path_o->dirname;
$dirname =~ s=/$==; # Remove the trailing slash.
say $basename, ' ', $dirname;
}
您可以使用File::Basename函数来解析文件路径:
#!/usr/bin/env perl
use strict;
use warnings;
use File::Basename;
my $string = "../dira/dirb/*.txt";
my $stringA = dirname($string);
my $stringB = basename($string);
printf "String A: %-25sString B: %s\n", $stringA, $stringB;
$string = "dira/dirb/dirc/.../dirn/test.pl";
$stringA = dirname($string);
$stringB = basename($string);
printf "String A: %-25sString B: %s\n", $stringA, $stringB;