Автор Тема: use strict  (Прочитано 3572 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Гость

  • Гость
use strict
« : 10 Сентября 2002, 09:46:37 »
Я недавно поднимал тему про определения дня недели по заданной дате.
http://forums.webscript.ru/showthread.php?threadid=8055&msgnum=7

Я благодарен за помощь, но есть одно но.
В коде:
#!/usr/bin/perl -w
use strict;

my $date = \'2002-09-06\';

sub dayofweek {
my @years = (0, 2, 3, 4);
my @month = (undef, 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5);
my @days = (\'Sun\', \'Mon\', \'Tue\', \'Wed\', \'Thu\', \'Fri\', \'Sat\');

my $date = shift;
my ($yy, $mm, $dd) = split(/\\-/, $date);

$dd =~ s/^0//;
$mm =~ s/^0//;
my($tmp, $a, $b, $c, $e);
$tmp = $yy - 1996;
$a = $tmp & 3;
$b = ($tmp >> 2) + ($tmp & hex("FC"));
$c = $month[$mm];

if($a == 0 && $mm > 2){$c++;}
$a = $years[$a];
$e = ($a+$b+$c+$dd) % 7;

return $days[$e];
}

print "The day($date) is: ".dayofweek($date)."\\n"

используется use strict;
С это весчью я еще не работал. Как я понял она требует изменение синтаксиса кода.
Вы не могли бы рассказать для чего он так необходим и можно ли уйти в данном коде и если да - то как. А то я не сильно горю желанием менять остальную часть кода (~50 КБ) под новый сиснтаксис.

Заранее спасибо.

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
use strict
« Ответ #1 : 10 Сентября 2002, 11:40:38 »
Гость, привет - это опять я. В этом коде ты легко можешь убрать use strict; и ничего плохого не произойдет.
А для чего я её тулю во все свои скрипты? Дело в том, что Перлу полезно точно знать где чии переменные, чтоб не путать. По умолчанию он просто "угадывает", но это нехорошо. Углублятся в эту тему сейчас я не буду, скажу только, что с use strict; переменные нужно обьявлять, типа my $a; my $b: etc.

ВВЕДИТЕ СВОЕ ИМЯ

  • Гость
use strict
« Ответ #2 : 10 Сентября 2002, 12:11:08 »
#!/usr/bin/perl -w
my $date = \'2002-09-06\';

sub dayofweek {
my @years = (0, 2, 3, 4);
my @month = (undef, 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5);
my @days = (\'Sun\', \'Mon\', \'Tue\', \'Wed\', \'Thu\', \'Fri\', \'Sat\');

my $date = shift;
my ($yy, $mm, $dd) = split(/\\-/, $date);

$dd =~ s/^0//;
$mm =~ s/^0//;
my($tmp, $a, $b, $c, $e);
$tmp = $yy - 1996;
$a = $tmp & 3;
$b = ($tmp >> 2) + ($tmp & hex("FC"));
$c = $month[$mm];

if($a == 0 && $mm > 2){$c++;}
$a = $years[$a];
$e = ($a+$b+$c+$dd) % 7;

return $days[$e];
}

print "The day($date) is: ".dayofweek($date)."\\n"

Т.е. так? Или my тоже поубирать? (уже пробовал - не работает)

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
use strict
« Ответ #3 : 10 Сентября 2002, 14:27:31 »
У меня все работает - со strict и без.

Оффлайн SteelRat

  • Funk U!
  • Старожил
  • ****
  • Сообщений: 290
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thewebfactory.fatal.ru
use strict
« Ответ #4 : 10 Сентября 2002, 16:21:56 »
use vars \'@years\', \'@years\'; # etc...
Debian/GNU Linux is rulezz...

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
use strict
« Ответ #5 : 11 Сентября 2002, 00:07:53 »
Цитировать
переменные нужно обьявлять, типа my $a; my $b: etc.

Угу. А ещё нормальные имена переменным давать используя в них только буквы и цифры, ну и ещё знаки подчёркивания, и не длиннее 16 (вродебы-:) точной спецификации я не помню).
А ещё use strict; хорош тем что, когда его убираешь, то всё продолжает работать, и объявления переменных убирать для этого не надо.
Я тоже его использую во всех программах, вернее начал использовать месяца три назад, с тех пор читаемость программ резко повысилась, так что рекомендую.
ВВЕДИТЕ СВОЕ ИМЯ, что конкретно у тебя не работает? На что ругается? Как ты вызываешь эту функцию? Может там ошибка...
Ну к чему все это, лучше бы водки выпили...

Оффлайн КшЫуфксрук

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 99
  • +0/-0
  • 0
    • Просмотр профиля
    • http://risearch.org/
use strict
« Ответ #6 : 11 Сентября 2002, 00:26:24 »
> переменные нужно обьявлять, типа my $a; my $b: etc.

И одно маленькое предупреждение (на всякий случай). Никогда
не нужно объявлять переменные my $a; my $b; потому что они уже объявлены (это внутренние переменные Перла). И вообще лучше их не использовать нигде, кроме сортировки, чтобы потом ошибки долго не пришлось искать.

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
use strict
« Ответ #7 : 11 Сентября 2002, 00:33:02 »
В одном из предидущих постов уже поднималась эта тема - оказалось, что человек вызывал функцию с таким аргументом:

my $date = \'$year-$month-01\';

И как оно могло работать? НИКАК!
(другое дело - my $date = "$year\\-$month\\-01";)

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
use strict
« Ответ #8 : 11 Сентября 2002, 00:52:50 »
Serchey, а  КшЫуфксрук, ИМХО, прав.
Да и в смысле читаемости кода $a и $b не лучший выбор (все привыкли что они используются в сортировке).
Ну к чему все это, лучше бы водки выпили...

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
use strict
« Ответ #9 : 11 Сентября 2002, 13:06:15 »
Да я знаю, просто когда-то не знал. Тем не менее, ошибок с этим НИКОГДА у меня небыло. Пока Перл понимает все правильно, и этому я рад, имхо.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28