Perl如何根据不同长度的字符分割行

Perl如何根据不同长度的字符分割行,perl,split,Perl,Split,我想根据多个字符长度拆分一行,并将其存储在单独的变量中。 例如:$myString=“Mickey 24 USA alive 此处前12个字符为用户名,后2个字符为年龄,后23个字符为国家,后7个字符为状态。 那么,有没有一种方法可以单独保存它们使用split()或s//来存储它们呢? 谢谢,使用正则表达式进行匹配,或者: 甚至可以在一行中使用: s/^\s+|\s+$//g for ($name, $age, $country, $status); 如果有固定宽度的字段,请使用unpack

我想根据多个字符长度拆分一行,并将其存储在单独的变量中。
例如:
$myString=“Mickey 24 USA alive

此处前12个字符为用户名,后2个字符为年龄,后23个字符为国家,后7个字符为状态。
那么,有没有一种方法可以单独保存它们使用
split()
s//
来存储它们呢?

谢谢,

使用正则表达式进行匹配,或者:

甚至可以在一行中使用:

s/^\s+|\s+$//g for ($name, $age, $country, $status);

如果有固定宽度的字段,请使用unpack

比如:

my ($username, $age, $country, $status) = unpack("A12A2A23A7", $myString);

解包固定宽度字段最简单有效的方法是使用

像这样

use strict;
use warnings;

my $my_string = 'Mickey      24                    USA alive';

my ($username, $age, $country, $status) = unpack 'a12 a2 a23 a7', $my_string;

print <<__END_OUTPUT__;
"$username"
"$age"
"$country"
"$status"
__END_OUTPUT__

Tim Toady一直在忙这件事。如前几张海报所述,用unpack打开你自己的包,或者使用CPAN模块中的一个,使这类工作变得简单

也可提供 -数据::固定格式 -AnyData::Format::Fixed
-Text::FixedWidth

这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论-你可以随时对自己的帖子发表评论,一旦你有足够的评论,你就可以发表评论。@TomFenech事实上,它确实回答了这个问题,尽管回答得很差。一个代码示例会让这成为一个问题更好的答案是:
my($username、$age、$country、$status)=解包(“A12A2A23A7”、$myString)
@ThisSuiteisBlack我不应该写我自己的注释,而不是使用预先编写的选项。我的观点是,现在的答案作为注释会更好。你的示例看起来很有用,并且会提高答案的质量。正则表达式和解包之间有一个很好的比较。非常值得一读伊姆霍。
s/^\s+|\s+$//g for ($name, $age, $country, $status);
my ($username, $age, $country, $status) = unpack("A12A2A23A7", $myString);
use strict;
use warnings;

my $my_string = 'Mickey      24                    USA alive';

my ($username, $age, $country, $status) = unpack 'a12 a2 a23 a7', $my_string;

print <<__END_OUTPUT__;
"$username"
"$age"
"$country"
"$status"
__END_OUTPUT__
"Mickey      "
"24"
"                    USA"
" alive"