URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8897
[ Назад ]

Исходное сообщение
"значение переменной совпала с оператором"

Отправлено dimdim , 15-Окт-10 19:01 
Помогите разобраться
open(TESTFILE, "Z:/home/test1.ru/www/in2.txt");
$i=0;
while(<TESTFILE>) {
    $text= $_;
      if ($text=~/(\w+):(\S+):(\w+):(\w+)::(\S+)::/)
      {
       $user=$1;
       $passwd=$2;
       $cr=$3;
       $cr2=$4;
       $put=$5;
      }
     $strings[2*$i]=$user;       #user
     $strings[2*$i+1]=$passwd;    #passwd
     $i++;
        }

файл in2.txt

it:555e283e36d46da2e6caa4bf306e05f5:fdfd:fdfdf:dsdsds::
123:a43c006e3cfca6b385a80e3769fdda87:11:1:234::
на выходе $user = it как результат вывод
it:555e283e36d46da2e6caa4bf306e05f5:fdfd:fdfdf:dsdsds::
it:555e283e36d46da2e6caa4bf306e05f5:fdfd:fdfdf:dsdsds::

как сделать чтобы значение из файла воспринималось как текст, а не как оператор it ???


Содержание

Сообщения в этом обсуждении
"значение переменной совпала с оператором"
Отправлено PavelR , 15-Окт-10 19:26 
>[оверквотинг удален]
>      $i++;
>         }
> файл in2.txt
> it:555e283e36d46da2e6caa4bf306e05f5:fdfd:fdfdf:dsdsds::
> 123:a43c006e3cfca6b385a80e3769fdda87:11:1:234::
> на выходе $user = it как результат вывод
> it:555e283e36d46da2e6caa4bf306e05f5:fdfd:fdfdf:dsdsds::
> it:555e283e36d46da2e6caa4bf306e05f5:fdfd:fdfdf:dsdsds::
> как сделать чтобы значение из файла воспринималось как текст, а не как
> оператор it ???

Значение из файла воспринимается адекватно. Ошибка в скрипте.


"значение переменной совпала с оператором"
Отправлено Pahanivo , 15-Окт-10 19:28 
область видимости переменных? )

"значение переменной совпала с оператором"
Отправлено lepa , 16-Окт-10 01:46 
($v1, $v2, $v3) = split(":", $_)

мне кажется, что так было бы лучше.


"значение переменной совпала с оператором"
Отправлено ACCA , 22-Окт-10 23:31 
> open(TESTFILE, "Z:/home/test1.ru/www/in2.txt");
> $i=0;

1. убираем open и индекс для массива. Это не Basic

> while(<TESTFILE>) {
>   $text= $_;
>       if ($text=~/(\w+):(\S+):(\w+):(\w+)::(\S+)::/)

2. убираем ненужную переменную и проверки, если нет обработчика ошибок формата


>        $user=$1;
>        $passwd=$2;

[...]

3. убираем разбор ненужных переменных

>      $strings[2*$i]=$user;      
>      $strings[2*$i+1]=$passwd;    #passwd

4. убираем заполнение массива вручную.

Пишем:

#!/usr/bin/perl -w
use strict;
my (@fld,@strings);

while (<>) {
   @fld = split /:/;
   # здесь можно проверить значения @fld[0,1]
   push @strings, @fld[0,1];
}

запускаем script.pl < in2.txt


"значение переменной совпала с оператором"
Отправлено Pahanivo , 24-Окт-10 01:40 
ну вот взял и все испортил ))
так человек не научится ходить по граблям ))