Что получится, если запустить этот скрипт на выполнение?
#!/usr/bin/perl
use strict;
$a = 1;
$b = 2;
$c = 3;
print $a+$b+$c, "\n";
Обратите внимание на use strict
Нехорошо использовать переменные, не объявив их через my
или our
В скрипте целых 3 необъявленных переменных. Конечно же, скрипт не пройдет синтаксический анализ! Но на какой строчке компиляция сломается?
>perl abc.pl
Global symbol "$c" requires explicit package name at abc.pl line 7.
Global symbol "$c" requires explicit package name at abc.pl line 9.
Execution of abc.pl aborted due to compilation errors.
sort { $a <=> $b } @array;
$a
и $b
– глобальные переменные, объявленные для функции sort
самим перлом.
Поскольку $a
и $b
объявлены, синтаксический анализатор пропустит их, и выдаст ошибку на $c
.
Мораль: всегда используйте прагму strict
, объявляйте все переменные
с помощью операции my
или (если очень надо) our
.
А использование переменных $a
и $b
вне функции sort
не приводит ни к чему хорошему.