Perl. Восстановление переменной в цикле

use strict;
use warnings;
use 5.010;
my @languages = qw/Perl PHP Ruby/;
my $lang = 'Python';
foreach $lang (@languages){
    say $lang;
}
say '===========Loop is end!==========';
say $lang;

В результате получим:

Perl
PHP
Ruby
===========Loop is end!==========
Python

Таким образом Perl, при входе в цикл foreach сохраняет значение управляющей переменной, а после выхода из цикла восстанавливает ее.
Кроме того при модификации управляющей переменной — меняется и элемент массива:

use strict;
use warnings;
use Data::Dumper;
use 5.010;

my @languages = qw/Perl PHP Ruby/;
my $lang = 'Python';
foreach $lang (@languages){
    $lang = "$lang is cool!" if $lang eq 'Perl';
    say $lang;
}
say Dumper(\@languages);

Получим:

Perl is cool!
PHP
Ruby
$VAR1 = [
‘Perl is cool!’,
‘PHP’,
‘Ruby’
];

Perl VS PHP холиварим

Коллега сегодня изрек. Расшифровка «ПХП»:

‘Пхп — Хуевый Перл’

p.s. языки можно поменять местами, кому как больше нравится =)
p.p.s Можно и Питон сюда вкорячить.

Yii хотелки и меньше лапше-кода

Довольно часто, при работе с сессией в Yii, приходится писать код вот такого плана:

$nickName    = Yii::app()->user->getState('nickName');
$accessLevel = Yii::app()->user->getState('accessLevel');
.........................................................

Аналогично и при установке этих значений.

Было бы здорово иметь возможность передавать методам getState и setState массив параметров:

$data = Yii::app()->user->getState(array(
       'nickName',
       'accessLevel' 
));

или

Yii::app()->user->setState(array(
       'nickName'     => 'xoma',
       'accessLevel'  => 'superAdmin' 
));

JavaScript экономим на if или очередная экономия на спичках

Чем меньше по объему внешний JavaScript-файл, тем лучше (он быстрее загружается браузером и возможно (!) быстрее выполняется).

Мало какие сценарии JavaScript обходятся без конструкции if…else.

Типично она выглядит вот так (использую jQuery):

if($(this).is(':checked')){
    $('span.noAnonym').hide();
}else{
    $('span.noAnonym').hide();
}

Как видно из примера в блоках if и else всего по одному выражению.
В этом случае, конструкцию if…else можно заменить тернарным оператором ? :.

Перепишем предыдущий пример:

$(this).is(':checked') ? 
$('span.noAnonym').hide() :
 $('span.noAnonym').show();

Экономим 10 символов !!!

Yii. Конфликт имени модуля и контроллера.

Есть Yii приложение, у которого в настройках прописан модуль ‘Page’:

'page' => array(
     'class'  => 'application.modules.page.PageModule',
     'layout' => 'application.views.layouts.column2'
),

Так же есть простой контроллер ‘PageController’, расположенный в каталоге приложения ‘controllers’.

При обращении по url типа: http://localhost/page/about — возникает ошибка, так как Yii пытается вызвать контроллер ‘about’ из модуля ‘Page’, а его нет.

При обращении по url http://localhost/Page/about (Page вместо page) — Yii вызывает контроллер Page и его экшн ‘about’ что мне и требовалось =).