Forum Webscript.Ru
Программирование => Perl => Тема начата: C++ от 29 Апреля 2003, 23:11:39
-
Привет!
Прога вот ошибку выдает:
Can\'t use string ("1") as an ARRAY ref while "strict refs" in use at /var/www/cgi-bin/script.pl line 129
В этой строчке находится вот это if($a1[$i][0]==$a2[$i][0]){тут то что мне нужно}
если этот код меняю на if(1){тут то что мне нужно}то ошибок нет
где a1 и a2 - двумерные массивы, заполняемце из файла
Причем прога работала, без пробдлем, теперь не работает:(
-
Ну а в массивах что находится? Или ты предлагаешь нам угадать?
P.S. Поставь перед этой строкой:
print $ar1[$i], $ar2[$i], "\\n";
-
C++
поставь в начале
no strict "refs";
-
no strict "refs";
А что это означает?
КшЫуфксрук
В массивах с данными все ОК, там строки и числа....
Что самое интересное, скрипт работал, а потом перестал:(
-
В массивах с данными все ОК
В каком-то из массивов перебираемый i-тый элемент не является ссылкой.
use strict;
# Как подразумевалось, каждый элемент является ссылкой на массив
my @a1 = ( [1,2], [2,1] );
my @a2 = ( [1,2], [2,1] );
# Приведет к ошибке Can\'t use string ("1") as an ARRAY ref while "strict refs"
# т.к. $a1[0] не "ссылка на массив"
# my @a1 = ( 1, [2,1] );
for (my $i = 0; $i <= $#a1; $i++) {
if ($a1[$i][0] == $a2[$i][0]){
print "Ok\\n";
}
}
-
Проблема в том, что у тебя получается символическая ссылка.
Цитата из "Advanced Perl Programming":
--------------------------------------
The strict pragma tells Perl to do strict error checking. You can even enumerate specific aspects to be strict about, one of which is `refs\':
use strict \'refs\'; # Tell Perl not to allow symbolic references
$var = "x";
$$var = 30;
This results in a run-time error whenever you try to use a symbolic reference:
Can\'t use string ("x") as a SCALAR ref while "strict refs" in use at try.pl line 3
The strict directive remains in effect until the end of the block. It can be turned off by saying no strict or, more specifically, no strict \'refs\'.
--------------------------------------