如何将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;