Применение символических ссылок является потенциально
Применение символических ссылок является потенциально опасным из-за возможности возникновения смысловых ошибок. Например, может показаться, что в результате выполнения следующей последовательности операторов
1 $а[0]="b";
2 #..............
3 $b[0]=2;
4 $b[1]=2;
5 #..............
6 $а[0] [0]=0;
7 #..............
8 $prod = $Ь[0]*Ь[1];
переменная $prod получит значение 4. Но это не так. В строке 6 мы осуществляем присваивание, рассчитывая на то, что будет применен известный механизм неявного создания жесткой ссылки $а [0]. Мы "забыли" о том, что значение $а[0] уже использовалось в строке 1 и, следовательно, в строке 6 элемент массива $а[0] является символической ссылкой, указывающей на переменную с именем "Ь". Это имя будет подставлено вместо символической ссылки, в результате чего элемент массива ь[0] получит новое значение 0. В итоге значение переменной $prod будет равно 0.
Во избежание подобных ошибок можно запретить использование символических ссылок в пределах текущего блока при помощи директивы
use strict 'refs';
Это ограничение, если требуется, можно отменить для внутреннего блока при помощи другой директивы
no strict 'refs 1 ;
(Директивы use, no рассматриваются в части 12.)
Еще одно замечание, касающееся символических ссылок. В версии 5.001 появилась новая возможность: если переменную, являющуюся символической ссылкой, заключить в фигурные скобки, то такая конструкция интерпретируется не как символическая ссылка, а как значение переменной, подобно тому, как аналогичная конструкция интерпретируется командной оболочкой shell операционной системы UNIX. В следующем фрагменте
1 use strict 'refs ';
2 ${name};
3 ${"name"};
вторая строка представляет собой просто значение переменной $name, а третья строка интерпретируется как символическая ссылка, указывающая на переменную $name и вследствие применения директивы use strict 'refs 1 вызывает сообщение об ошибке вида
Can't use string ("name") as a SCALAR ref while "strict refs" in use
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий