- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
sub trim
{
my ($string) = @_;
for ($string)
{
s/^\s+//;
s/\s+$//;
}
return $string;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−159
sub trim
{
my ($string) = @_;
for ($string)
{
s/^\s+//;
s/\s+$//;
}
return $string;
}
for ($string) такой for ($string)...
http://ideone.com/JWu2Kt
bormand 27.01.2014 10:39 # 0
Dummy00001 27.01.2014 14:41 # +2
bormand 27.01.2014 16:01 # 0
Или это не цикл, а какая-то специальная конструкция, которая означает "помести в $_ аргумент, выполни тело, а потом перепиши $_ обратно в аргумент"?
Я просто не пойму, каким образом результат попадает в $string. И что вообще такое for ($string), в мане такого случая я не вижу.
bormand 27.01.2014 16:10 # 0
for VAR (LIST) BLOCK
1) If VAR is omitted, $_ is set to each value.
2) If any element of LIST is an lvalue, you can modify it by modifying VAR inside the loop.
3) Лень искать цитату, но строка канает в массивном контексте.
Блин, за что мне это наказание... Как вы вообще в этом пёрле что-то понимаете...
Dummy00001 27.01.2014 17:01 # +1
Мой метод: Глубокий вдох.... Расслабится.... Медленый выдох....
Elvenfighter 28.01.2014 00:43 # 0
Так же интерпретируется и внутри for ($string) (т.е. создание массива), ибо можно писать for @array (без скобок)
bormand 28.01.2014 05:29 # 0
Да ну? У меня не работает.
http://ideone.com/dWljKm
http://ideone.com/gpegXT
Klopp 28.01.2014 08:14 # +1
Разница в том, что за if или for должно следовать выражение, и без явного выделения скобками в первом случае выражением будет считаться, например, "@a { s/b/d/; }", что ни валидным списком, ни составным выражением для for не является.
bormand 28.01.2014 08:44 # 0
Спасибо, кэп. Я умею читать логи ;)
Т.е. for без скобок можно писать только справа?
Elvenfighter 29.01.2014 00:13 # +1
http://ideone.com/zqqhEt
Ибо вариант for @a { .. code } интерпретатор пытается распознать как hash slice.
anonimb84a2f6fd141 27.01.2014 16:34 # 0
bormand 27.01.2014 16:48 # 0
roman-kashitsyn 27.01.2014 16:56 # +1
bormand 27.01.2014 16:59 # 0
Klopp 27.01.2014 17:04 # +1
Итого:
Dummy00001 27.01.2014 17:10 # +1
а вот это:
я как то раз делал чиста по приколу merge sort. есть две возможности: части массива в лоб передавать функции или передавать ссылкой + индексы начала/конца. разница на моих тестах была между двумя методами меньше 15%. после этого перестал извращатся и просто в лоб копирую/возвращаю.
bormand 27.01.2014 17:15 # +1
Он же памяти вдвое больше жрет... Это на дисках его юзают от безысходности, а в оперативе зачем?
Klopp 27.01.2014 17:16 # 0
bormand 27.01.2014 17:20 # 0
Klopp 27.01.2014 17:24 # +2
Dummy00001 27.01.2014 17:22 # 0
но я лично по граблям void context vs. list context vs. scalar context уже в доволь находился, и больше не хочется. поэтому я почти никогда wantarray не пользуюсь. как и неявной передачей $_/@_.
Dummy00001 27.01.2014 17:06 # 0
Я ленюсь и типично пишу: $string =~ s!^\s+|\s+$!!g;
Слегка менее эффективно, но по барабану, потому что лень правильно писать.
bormand 27.01.2014 17:09 # 0
Dummy00001 27.01.2014 17:13 # +1
http://perldoc.perl.org
но для трима никто ничего включать не будет, потому уже делается в одну строку.
Lure Of Chaos 27.01.2014 23:57 # +1