perl-将数组的值放在数组中

时间:2018-11-30 08:35:27

标签: arrays perl

我想输入一个值 $temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]位于splited_line数组中,但我不知道如何。

我的脚本是:

#!/usr/bin/perl use DBI; use Data::Dumper; use DBD::mysql; use POSIX;
#use strict; use warnings;

#"/mnt/toto/titi.log" or die $!;

open(FILE,"<titi.log"); print "file loaded \n"; my @lines=<FILE>; #tout les valeurs du fichier se trouve dans le tableau lines close(FILE);
#my @all_words; my @temp_arr;
#my @splited_line;

print "$lines[0]"; print "$lines[83000]";

foreach my $line(@lines) {

@temp_arr=split('\s',$line);

push(@temp_arr);

print "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";

@splited_line = "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n"; #this line don't work

print $splited_line[2]; 

}

感谢您提供任何信息,我想要一个结果为$ splited_line [2]。

更新

我这样做:

foreach my $line(@lines) {

@temp_arr=split('\s',$line);

push(@temp_arr);

#print "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";

@splited_line = "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";


push(@splited_line);

print $splited_line[2];
}

输出:

Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.

我不知道为什么

1 个答案:

答案 0 :(得分:2)

您的代码看起来很奇怪。

#!/usr/bin/perl use DBI; use Data::Dumper; use DBD::mysql; use POSIX;

看起来好像都应该不在同一行。

#use strict; use warnings;

评论这些是一个非常糟糕的主意!

foreach my $line(@lines) {

    @temp_arr=split('\s',$line);

    push(@temp_arr);

我不确定您在这里做什么? push()至少接受两个参数-一个数组(您拥有)和一些要添加到该数组中的项目(您已省略)。没有第二个参数,push()不会执行任何操作。

    #print "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";

这似乎是写print "@temp_arr\n"的很长的方法:-)

    @splited_line = "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";

好的,这就是您要出错的地方。您要将@temp_arr的所有元素放入字符串中,然后将该(单个)字符串分配给@splited_line@splited_line剩下一个元素-包含您的字符串。您可能只需要@splited_line = @temp_arr

    push(@splited_line);

另一个毫无意义的push()。您为什么要将它们添加到代码中?

    print $splited_line[2];

由于@splited_line仅包含一个元素,因此$splited_line[2]将包含undef

}

我认为您想要这样的东西:

#!/usr/bin/perl

# strict and warnings before all other code
use strict;
use warnings;

use DBI;
use Data::Dumper;
# You don't usually need to load DBD modules
use DBD::mysql;
use POSIX;

# 3-arg open() and lexical filehandle
# Check return from open().
open(my fh, '<', 'titi.log') or die "Cannot open file: $!\n";
print "file loaded \n";

# Do you really need to read the whole file in here?
my @lines = <$fh>; #tout les valeurs du fichier se trouve dans le tableau lines 
close($fh);

# No need to quote this values.
print $lines[0];
print $lines[83000];

foreach (@lines) {
    # By default, split() splits $_ on whitespace
    my @temp_arr = split;

    print "@temp_arr\n";

    my @splited_line = @temp_arr;

    print $splited_line[2]; 
}