Perl:如何在不存储到数组的情况下拆分字符串并继续拆分?

Perl:如何在不存储到数组的情况下拆分字符串并继续拆分?,perl,split,temporary,Perl,Split,Temporary,我想以前有人问过这个问题,但我找不到 说 是否仍然可以避免临时数组变量@w1、@w2和@w3,直接获取$w3[1]呢?我记得继续拆分工作,但忘记语法。 谢谢。是的,这是可能的,但阅读起来要困难得多,因此不建议: my $string = "something_like:this-and/that"; my $this = (split /:/, (split /-/, (split(/_/, $string))[1])[0])[1]; print $this; #print out "this"

我想以前有人问过这个问题,但我找不到

是否仍然可以避免临时数组变量@w1、@w2和@w3,直接获取$w3[1]呢?我记得继续拆分工作,但忘记语法。
谢谢。

是的,这是可能的,但阅读起来要困难得多,因此不建议:

my $string = "something_like:this-and/that";
my $this = (split /:/, (split /-/, (split(/_/, $string))[1])[0])[1];
print $this; #print out "this"
或者,您可以在此实例中使用正则表达式,但不要认为它添加了任何内容:

my $string = "something_like:this-and/that";
my ($this) = $string =~ /.*?_.*?:([^-]*)/ or warn "not found";
print $this;

您自己的解决方案不必要地在下划线上拆分,除非您的实际数据与示例明显不同。你可以写这个

use strict;
use warnings;

my $string = "something_like:this-and/that";
my $value = (split /-/, (split /:/, $string)[1])[0];
print $value;
或者此解决方案使用正则表达式并按您的要求执行

use strict;
use warnings;

my $string = "something_like:this-and/that";
my ($value) = $string =~ /:([^_-]*)/;
print $value;
输出

this

这将就地修改
$string

my $string = "something_like:this-and/that";
$string =~ s/^.*:(.+)-.*/$1/;

知道了。我错过了一双鞋。谢谢。这样就把
$string
设置为
\比如:这个和/那个
鉴于OP的字符串显然是假的数据,我相信你的两种解决方案都假设了太多。从技术上讲,
$value=(split/[-:]/,$string)[1]
也适用于精确的数据,但我不建议这样做。
my $string = "something_like:this-and/that";
$string =~ s/^.*:(.+)-.*/$1/;