The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Не хватает базовых знаний"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Не хватает базовых знаний"  
Сообщение от Hetzer (ok) on 06-Апр-08, 10:57 
Привет, переделывая скрипты наткнулся на такое(упрощено):
my @array=("AB","AC");
for (@array) {
print "before: $_";
my $a = ~s/A//g;
print " after: $_\n";
}
Чувствую что-то не то.. не хватает базовых знаний
Почему $_ изменилась?
Насколько целесообразно так делать и не чреват ли такой подход проблемами в будущем?
Как будет идеологически верно работать с $_ в таком контексте?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Не хватает базовых знаний"  
Сообщение от idle (ok) on 07-Апр-08, 09:53 
>Привет, переделывая скрипты наткнулся на такое(упрощено):
>my @array=("AB","AC");
>for (@array) {
>print "before: $_";
>my $a = ~s/A//g;
>print " after: $_\n";
>}
>Чувствую что-то не то.. не хватает базовых знаний
>Почему $_ изменилась?

Потому что оператор замены 's/', как и все другие операторы, по умолчанию работает с операндом $_.
>Насколько целесообразно так делать и не чреват ли такой подход проблемами в
>будущем?

Не чреват.
>Как будет идеологически верно работать с $_ в таком контексте?

Как идеология позволяет, так и рабатайте.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Не хватает базовых знаний"  
Сообщение от Hetzer (ok) on 07-Апр-08, 10:00 
>[оверквотинг удален]
>
>Потому что оператор замены 's/', как и все другие операторы, по умолчанию
>работает с операндом $_.
>>Насколько целесообразно так делать и не чреват ли такой подход проблемами в
>>будущем?
>
>Не чреват.
>>Как будет идеологически верно работать с $_ в таком контексте?
>
>Как идеология позволяет, так и рабатайте.

спасибо

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Не хватает базовых знаний"  
Сообщение от angra (ok) on 07-Апр-08, 16:14 
>>Насколько целесообразно так делать и не чреват ли такой подход проблемами в
>>будущем?
>
>Не чреват.

Категорически неверно. Использование $_ вполне может привести к проблемам, причем трудно отлавливаемым. В общем случае нельзя сочетать $_ и невстроенные(те что отсутствуют в man perlfunc) функции.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Не хватает базовых знаний"  
Сообщение от idle (ok) on 07-Апр-08, 17:07 
>Использование $_ вполне может привести к проблемам, причем трудно отлавливаемым.

Не могу не согласиться. Создание нового кода, вообще всегда чревато проблемами.
>В общем случае нельзя сочетать $_ и невстроенные(те что отсутствуют в
>man perlfunc) функции.

То есть это работать не должно?


print myfunc($_);


sub myfunc {
    return shift;
}


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Не хватает базовых знаний"  
Сообщение от angra (ok) on 07-Апр-08, 17:40 
Я имел ввиду потенциальную опасность кода вроде такого:
foreach (@list) {
  &my_func;
  print $hash{$_};
}
В зависимости от my_func этот код может работать правильно либо неправильно, причем на одном наборе данных все будет хорошо, а вот на другом плохо. Не стоит забывать что вызов своей функции может быть добавлен в цикл и позже или может быть изменена сама функция. В результате получаем неустойчивый код. Поэтому для цикла лучше объявлять итерационную переменную явно, а не использовать $_. Разумеется есть ситуации где использование $_ более чем оправдано.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Не хватает базовых знаний"  
Сообщение от ACCA (ok) on 07-Апр-08, 22:31 
>my @array=("AB","AC");
>for (@array) {
>print "before: $_";
>my $a = ~s/A//g;
>print " after: $_\n";
>}
>Чувствую что-то не то.. не хватает базовых знаний
>Почему $_ изменилась?

Потому, что ты сказал сделать вот что -
     1. применить к $_ regexp s/A//g (изменив $_)
     2. выполнить побитное not над результатом
     3. записать что получилось, в $a

Убери пробел между `=' и `~', получится то, на что оно похоже.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру