Perl in_array
Программист на PHP спросил есть ли в Perl'e in_array (проверка на существование значения в массиве). Есть конечно! Только делается он так:
if (scalar grep {$_ eq $something} @something)
{
…
}Причём, сравнивать можно не только по прямому условию, но и по регулярному выражению, например.
Комментарии 35
А ты, поди, любишь за мощь?
а не массивом.
use strict;
my @something = qw(1 2 3);
my $something = 2;
{ # Вот так
my %hash; @hash{@something} = ();
if (exists $hash{$something}) {
print «$something found\n»;
}
}
{ # Или так
my %hash; @hash{@something} = (1) x scalar @something;
if ($hash{$something}) {
print «$something found\n»;
}
}
{ # Или так
my %hash = map {($_ => 1)} @something;
if ($hash{$something}) {
print «$something found\n»;
}
}
Или с самого начала использовать хэш.
позволю себе наглость задать вопрос:
парсер весь код сожрал даже буковки не оставил, попробую ещё раз.
сакральное знание — как в комменты не регистрах постить код, мне не открылось.
На попытку удалить «накасяченную» мессагу получаю «u have no rights».
так что пока кроме мусора ничего запостить не смог.
Отошлю тебе по почте, не сочти за наглость. ;)
if (grep(/4/, @array)){
say «exists»;
}
Даже короче чем на PHP.
if (grep(/^44$/, @array)){
say «exists»
}
Конечно же в примере частный случай и там регулярное выражение. Я не подставлял начало и конец строки. Заменил))) Что дальше?
Кстати, что вообще вас побудило прокомментировать заметку, которой 17 лет?
my @array = qw(1 44 34(?=….)34 44);
my $s = '(?=….)';
my $result =($s)= grep(/\Q$s\E/, @array);
if ($result){
say «exists $s»;
}
Конечно нет. Ваша со мной переписка показывает насколько это не так. А это мы ещё ООП не затронули.
Я заметил, что заметка очень старая, но решил написать для прикола.
А что же в переписке такого, что показывает на сколько это не так?
А вы в совершенстве знаете язык Perl и PHP, что позволяет вам делать вывод о том, что Perl плохой язык? Я, например, про PHP ничего не могу сказать т. к. так как опыта большого на нём нет.
По поводу ООП, не буду спорить.
То, с какой лёгкостью и сколько раз вы «выстрелили себе в ногу».
Про совершенство не знаю, я программировал на нём пять лет. Про //PHP// я нигде не говорил, что он хороший, вы этогде-то у меня прочитали?
Почему?
А сейчас на чём программируете?
А можно пример где я выстрелил себе в ногу?
Да собственно говоря нигде не видел.
Да просто нет желания.
Почитал про Вас. С 89 года программируете, впечатляет. Ассемблер — это серьёзно. У меня тоже много предков с Татарстана по маминой линии.
Так, чтобы за это деньги платили, ни на чём. Я техническим директором работаю сейчас.
Ну, собственно, вы решили не ту задачу, которая предлагалась, но не заметили этого два раза. Что это, если не оно?
И это по вашему признак не хорошего и не мощного языка? Если так, то вынужден не согласиться.как-то криво устроено ООП. Не знаю, может быть они правы. Но в целом язык мне нравится.какой-либо задачи можно ошибиться. С ними нужен глаз да глаз. У меня не было большого опыта работы с указателями в С++(старался их избегать), но где-то я читал статейку где рассматривались случаи в которых можно получить серьёзнейшую ошибку из-за их неправильно использования. Ну это же не говорит, что язык плохой. Просто нужно быть профи в этом языке и тогда будет всё классно.
То, что я два раза не совсем верно решил задачу не говорит о том, что язык не хороший и не мощный. Это проблема программиста решающего задачу. В данном случае я просто поспешил. Конечно же, если мы ищем по регулярному выражению, то нужно было искать полное совпадение использовав «^$» и при этом учитывать, что там могут быть спецсимволы регулярных выражений которые экранируются «\Q\E».
По поводу ООП ничего сказать не могу т. к. у меня не было случаев когда мне нужно было реализовывать на нём объектный подход. Я читал, что Perl многие ругают, что там
По вашей логике язык С++ можно назвать не мощным и не хорошим потому, что там есть указатели которыми нужно уметь пользоваться. И при решении
Признак не хорошего языка — когда разные вещи делаются в нём настолько похоже, что их можно легко перепутать. Не мощный Перлиз-за плохого ООП, да что там говорить, в нём даже констант нет.
Си++ — мощный, но не хороший язык. Мощный и хороший — это Раст, Ним (в нише Си++).
Лично меня это не пугает. И Perl мне очень нравится.
use constant СONST => 12;
Но есть такая реализация: const my $const => 12;
Но нужно модуль установить Const::Fast. Говорят, что такая реализация не даёт проблем…
Понятно, что этот модуль по умолчанию не встроен в perl, но я буду надеяться, что в Perl 7 сделают по уму.