如何在perl中将左侧数据拆分为键,将右侧数据拆分为ask值

如何在perl中将左侧数据拆分为键,将右侧数据拆分为ask值,perl,Perl,我的输入文件: Lin :202020 123 455 Star :21334 1233 555 我试图将Lin和Star分割为键,将其余的数字分割为值。 但是,我得到的输出如下: '202020 123 455 Star' => undef, 我的预期产出: $VAR1 = { 'Lin' =>'202020 123 455', 'Star'=>'21334 1233 555' } 我的代码: use strict; use warnings; use Data::D

我的输入文件:

Lin :202020 123 455
Star :21334 1233 555
我试图将Lin和Star分割为键,将其余的数字分割为值。 但是,我得到的输出如下:

'202020 123 455 Star' => undef,
我的预期产出:

$VAR1 = {
'Lin' =>'202020 123 455',
'Star'=>'21334 1233 555'
}
我的代码:

use strict;
use warnings;

use Data::Dumper;
.
.
.
.
while($lines)
{
my %hash = split /[:]/,$lines;
print Dumper (%hash);
last;
}

代码的问题:

  • 我们不知道什么是
    $lines
  • while($line)
    没有任何意义
  • 您正在循环的每次迭代中初始化
    %hash
  • last
    没有任何意义
  • 解决方案:

    use strict;
    use warnings;
    
    use Data::Dumper;
    
    my %hash;
    
    while (<DATA>) {
        chomp;
        my @parts = split(/\s*:\s*/);
        $hash{$parts[0]} = $parts[1];
    }
    
    print Dumper(\%hash);
    
    __DATA__
    Lin :202020 123 455
    Star :21334 1233 555
    
    使用严格;
    使用警告;
    使用数据::转储程序;
    我的%hash;
    而(){
    咀嚼;
    my@parts=split(/\s*:\s*/);
    $hash{$parts[0]}=$parts[1];
    }
    打印转储程序(\%hash);
    __资料__
    林:202020 123 455
    星星:21334123555
    
    使用5.18.2;
    严格使用;
    使用警告;
    使用数据::转储程序;
    my@Data=(“林:202020 123 455”,“星:21334 1233 555”);
    我的%hash=map{(split(':'))[0]=>(split(':'))[1]}@Data;#您还可以使用而不是@Data
    打印转储程序(\%hash);
    
    显示设置$行及其内容的代码您可以发布您的真实代码吗?我可能会在拆分中添加一些可选的空格:
    /\s*:\s*/
    ,因为空格会在所需的输出中消失。@briandfoy这很公平。编辑了我的答案来解释这一点。
    use 5.18.2;
    use strict ;
    use warnings ;
    use Data::Dumper;
    
    my @Data = ( "Lin :202020 123 455" , "Star :21334 1233 555" ) ;
    my %hash = map { (split(':'))[0] => (split(':'))[1] } @Data ; # you can also use <STDIN> instead of @Data                                             
    print Dumper(\%hash);