Forum Webscript.Ru
Программирование => Perl => Тема начата: Гость от 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 КБ) под новый сиснтаксис.
Заранее спасибо.
-
Гость, привет - это опять я. В этом коде ты легко можешь убрать use strict; и ничего плохого не произойдет.
А для чего я её тулю во все свои скрипты? Дело в том, что Перлу полезно точно знать где чии переменные, чтоб не путать. По умолчанию он просто "угадывает", но это нехорошо. Углублятся в эту тему сейчас я не буду, скажу только, что с use strict; переменные нужно обьявлять, типа my $a; my $b: etc.
-
#!/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 тоже поубирать? (уже пробовал - не работает)
-
У меня все работает - со strict и без.
-
use vars \'@years\', \'@years\'; # etc...
-
переменные нужно обьявлять, типа my $a; my $b: etc.
Угу. А ещё нормальные имена переменным давать используя в них только буквы и цифры, ну и ещё знаки подчёркивания, и не длиннее 16 (вродебы-:) точной спецификации я не помню).
А ещё use strict; хорош тем что, когда его убираешь, то всё продолжает работать, и объявления переменных убирать для этого не надо.
Я тоже его использую во всех программах, вернее начал использовать месяца три назад, с тех пор читаемость программ резко повысилась, так что рекомендую.
ВВЕДИТЕ СВОЕ ИМЯ, что конкретно у тебя не работает? На что ругается? Как ты вызываешь эту функцию? Может там ошибка...
-
> переменные нужно обьявлять, типа my $a; my $b: etc.
И одно маленькое предупреждение (на всякий случай). Никогда
не нужно объявлять переменные my $a; my $b; потому что они уже объявлены (это внутренние переменные Перла). И вообще лучше их не использовать нигде, кроме сортировки, чтобы потом ошибки долго не пришлось искать.
-
В одном из предидущих постов уже поднималась эта тема - оказалось, что человек вызывал функцию с таким аргументом:
my $date = \'$year-$month-01\';
И как оно могло работать? НИКАК!
(другое дело - my $date = "$year\\-$month\\-01";)
-
Serchey, а КшЫуфксрук, ИМХО, прав.
Да и в смысле читаемости кода $a и $b не лучший выбор (все привыкли что они используются в сортировке).
-
Да я знаю, просто когда-то не знал. Тем не менее, ошибок с этим НИКОГДА у меня небыло. Пока Перл понимает все правильно, и этому я рад, имхо.