Почему глобальные переменные в mysql.pm не объявлены как наши? - PullRequest
1 голос
/ 15 июля 2011

Цитируется из mysql.pm:

   3 package DBD::mysql;
   4 use strict;
   。。。。
  17 $err = 0;>--# holds error code   for DBI::err
  18 $errstr = "";>--# holds error string for DBI::errstr
  19 $drh = undef;>--# holds driver handle once initialised

Что странно, что все мои программы, которые use warnings; и используют этот модуль, не дают никаких предупреждений.

Почему?

Ответы [ 2 ]

8 голосов
/ 15 июля 2011

В строке 5 источника:

use vars qw(@ISA $VERSION $err $errstr $drh);

См. использовать переменные документация.

Это один из способов, которым мы смогли создать глобальные и строгие сосуществования до того, как our был представлен в Perl. Хотя теперь он считается «устаревшим» (согласно документации), он все еще существует в реальном коде. Я думаю, в некоторых случаях это вписывается в категорию: «Если это не сломано, не исправляйте это». Вы нашли один из этих случаев.

6 голосов
/ 15 июля 2011

Эти переменные предварительно объявлены с прагмой vars в 5-й строке:

use vars qw(@ISA $VERSION $err $errstr $drh);

Вот почему Perl не жалуется, несмотря на то, что use strict действует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...