Perl, сортировка строка/число
От: kvasya  
Дата: 31.05.11 10:02
Оценка:
Добрый день.

Как явно указать, что ключ хэша — число (переменная — число) ?

Пример:

my %table;
my $key = "11";
$table{$key} = "value";

my $key2 = 11;
$table{$key2} = "value";


нашел подобный пример в документации is_numeric, там используется strtol, но:
1. Будет ли это работать?
2. В версии под Win (v5.10.1) оно не работает с ошибкой "strtol is not defined in %posix::export_tags...":

use POSIX qw(:strtol);
my $tst = strtol( "1" );


Цель такая, из двух источников приходят ключи. Но с одного они идут в "произвольном" виде ("003", 3, "3"..), а со второго в виде чисел ( 1, 2, 3..).
Поэтому при помещении их в хэш, они интерпретируются как строки и "003" <> 3. Каковое поведение меня не устраивает.

Спасибо.
perl hash is_numeric
Re: Perl, сортировка строка/число
От: CaptainFlint http://flint-inc.ru/
Дата: 31.05.11 10:18
Оценка: 6 (1) +1
Здравствуйте, kvasya, Вы писали:

K>Как явно указать, что ключ хэша — число (переменная — число) ?


AFAIK, никак. Ключами хэша в Перле являются именно строки, а всё остальное к строкам приводится принудительно в процессе присваивания. Можно перевести строку в число, например, использовав функцию int().
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: Perl, сортировка строка/число
От: klyukin  
Дата: 31.05.11 10:39
Оценка: 2 (1)
my $x = "003";
print $x + 0;
Re: Perl, сортировка строка/число
От: CString  
Дата: 24.06.11 19:05
Оценка:
Привет.

Как уже писали


1

perl -e 'use Data::Dumper; $k1 = 1; $k2="003"; $h->{$k1} = 1; $h->{$k2+0} = 2; warn Dumper($h);'
$VAR1 = {
          '1' => 1,
          '3' => 2
        };


2
perl -e 'use Data::Dumper; $k1 = 1; $k2="003"; $h->{$k1} = 1; $h->{int($k2)} = 2; warn Dumper($h);'
$VAR1 = {
          '1' => 1,
          '3' => 2
        };



а еще был удивлен таким вариантом


 perl -e 'use Data::Dumper; $k1 = 1; $k2='003'; $h->{$k1} = 1; $h->{$k2} = 2; warn Dumper($h);'   $VAR1 = {
          '1' => 1,
          '3' => 2
        };
Re[2]: Perl, сортировка строка/число
От: anonymous Россия http://denis.ibaev.name/
Дата: 28.06.11 05:56
Оценка:
Здравствуйте, CString, Вы писали:

CS>а еще был удивлен таким вариантом

CS>
CS> perl -e 'use Data::Dumper; $k1 = 1; $k2='003'; $h->{$k1} = 1; $h->{$k2} = 2; warn Dumper($h);'
CS> $VAR1 = {
CS>          '1' => 1,
CS>          '3' => 2
CS>        };
CS>


Одинарные кавычки внутри одинарных кавычек. Perl не при чём.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.