Подскажите как сделать так, чтобы если значение переменных < 10 дописывать перед значением
ноль.Для одной переменной сделать легко, а как сделать для нескольких perem1,perem2,perem3 и т.д ?
$perem1=1
$perem2=12
$perem3=14Стало
$perem1="01"
$perem2="12"
$perem3="14"
>Подскажите как сделать так, чтобы если значение переменных < 10 дописывать перед
>значением
>ноль.
>
>Для одной переменной сделать легко, а как сделать для нескольких perem1,perem2,perem3 и
>т.д ?
>$perem1=1
>$perem2=12
>$perem3=14
>
>Стало
>$perem1="01"
>$perem2="12"
>$perem3="14"foreach (1..99) {
$var="perem$_";
$$var=sprintf('%02d',$$var);
}Хотя, подозреваю, что проблема в алгоритме, а не в его реализации...
>>Подскажите как сделать так, чтобы если значение переменных < 10 дописывать перед
>>значением
>>ноль.
my @a = (1..10);
@a = map { if ($_<10) { $_="0".$_ } } @a;
TIMTOWTDI ;)
>Хотя, подозреваю, что проблема в алгоритме, а не в его реализации...
Присоединяюсь.
>>>Подскажите как сделать так, чтобы если значение переменных < 10 дописывать перед
>>>значением
>>>ноль.
>my @a = (1..10);
>@a = map { if ($_<10) { $_="0".$_ } } @a;
>
>TIMTOWTDI ;)
>>Хотя, подозреваю, что проблема в алгоритме, а не в его реализации...
>Присоединяюсь.
Требуется к значениям числа, месяца, часов и секунд добавлять 0, если значение меньше 10.
Не вижу здесь никого особого алгоритма,чтобы в нем ошибиться.
>Требуется к значениям числа, месяца, часов и секунд добавлять 0, если значение
>меньше 10.
>Не вижу здесь никого особого алгоритма,чтобы в нем ошибиться.таки, видимо, нужно что-то вроде:
printf('%02d.%02d.%02d %02d:%02d:%02d', $d,$m,$y,$H,$M,$S);
:)Каков вопрос - таков ответ.
>
>>Требуется к значениям числа, месяца, часов и секунд добавлять 0, если значение
>>меньше 10.
>>Не вижу здесь никого особого алгоритма,чтобы в нем ошибиться.
>
>таки, видимо, нужно что-то вроде:
>printf('%02d.%02d.%02d %02d:%02d:%02d', $d,$m,$y,$H,$M,$S);
>:)
>
>Каков вопрос - таков ответ.
Я понимаю, но люди с разной квалификацией обращаются
if ($d < 10)
{$d="0$d";}
if ($m < 10)
{$m="0$m";}
Вот эту конструкцию как заменить на более правильную ?
>>
>>>Требуется к значениям числа, месяца, часов и секунд добавлять 0, если значение
>>>меньше 10.
>>>Не вижу здесь никого особого алгоритма,чтобы в нем ошибиться.
>>
>>таки, видимо, нужно что-то вроде:
>>printf('d.d.d d:d:d', $d,$m,$y,$H,$M,$S);
>>:)
>>
>>Каков вопрос - таков ответ.
>Я понимаю, но люди с разной квалификацией обращаются
>if ($d < 10)
>{$d="0$d";}
>if ($m < 10)
>{$m="0$m";}
>Вот эту конструкцию как заменить на более правильную ?
Вам вроде уже написали. Если речь идёт о датах, тогда более правильно воспользоваться strftime.
use POSIX qw(strftime);
my ($month,$day) = ((strftime "%m",localtime), (strftime "%d",localtime))
>Вот эту конструкцию как заменить на более правильную ?В перле все, что красиво и работает - правильно.
Вариантов полно.$d="0$d" if $d < 10;
$d < 10 && $d="0".$d;
$d =~ s/^(\d)$/0$1/;
и так далее и тому подобное.Я бы лично использовал sprintf.
>
>>Вот эту конструкцию как заменить на более правильную ?
>
>В перле все, что красиво и работает - правильно.
>Вариантов полно.
>
>$d="0$d" if $d < 10;
>$d < 10 && $d="0".$d;
>$d =~ s/^(\d)$/0$1/;
>и так далее и тому подобное.
>
>Я бы лично использовал sprintf.А так не очень, как считаете ?
foreach $calc (@before)
{if ($calc < 10)
{
$hash{$calc}="0$calc";}
else
{$hash{$calc}=$calc;}
>А так не очень, как считаете ?
>foreach $calc (@before)
> {if ($calc < 10)
>{
>$hash{$calc}="0$calc";
>
>}
>else
>{$hash{$calc}=$calc;}Можно и так. Вот только смысл как-то от меня ускальзывает...
Ведь, по сути, создается массив с соответствующими "zerofill" значениями.
Тогда уж лучше использовать map.
>Тогда уж лучше использовать map.
попробую map , спасибо.
А пока остановился на printf '%02d' -для вычисляемых значений и strftime для дат, как вы и предлагали. Лишний раз убеждаюсь - люди на форуме плохого не посоветуют ;)
Первый ответ ваш, madskull, мне понравился своей точностью. Хотя ,как правильно сказали, какой вопрос - такой ответ. ;)
>
>Я бы лично использовал sprintf.
Это в другом месте используется. Для вычисления начала и конца недели, т.е. для записи вида 01.05.2006 - 07.05.2006