Ваш код выглядит довольно странно.
#!/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];
}