У меня есть такой адрес, как 2001:db8::1
в скаляре, и хотел бы получить расширенную форму, 2001:0db8:0000:0000:0000:0000:0000:0001
. Является ли основной пакет пакетов Perl - в его обширном лесу в /usr/lib/perl5/...
- модуле, который уже будет делать это? Если нет, есть ли у кого-то несколько строк, которые бы это сделали?Perl Расширение адреса IPv6/разбор
4
A
ответ
9
CPAN имеет Net::IP
, который может делать то, что вам нужно.
Вот стенограмма показывая его в действии:
$ cat qq.pl
use Net::IP;
$ip = new Net::IP ('2001:db8::1');
print $ip->ip() . "\n";
$ perl qq.pl
2001:0db8:0000:0000:0000:0000:0000:0001
2
Net::IP
, безусловно, отличный способ пойти, потому что это легкий и мощный. Но, если вы собираетесь разбирать тонны из них, вы можете вместо этого использовать inet_pton
из пакета Socket
, поскольку он в 10-20 раз быстрее, чем версия объекта Net::IP
, даже с предварительно созданным объектом. И 4ish раз быстрее, чем версия ip_expand_address
:
use Net::IP;
use Time::HiRes qw(gettimeofday tv_interval);
use Socket qw(inet_pton AF_INET6);
use bignum;
use strict;
# bootstrap
my $addr = "2001:db8::1";
my $maxcount = 10000;
my $ip = new Net::IP($addr);
my ($t0, $t1);
my $res;
# test Net::IP
$t0 = [gettimeofday()];
for (my $i = 0; $i < $maxcount; $i++) {
$ip->set($addr);
$res = $ip->ip();
}
print "Net::IP elapsed: " . tv_interval($t0) . "\n";
print "Net::IP Result: $res\n";
# test non-object version
$t0 = [gettimeofday()];
for (my $i = 0; $i < $maxcount; $i++) {
$res = Net::IP::ip_expand_address('2001:db8::1', 6);
}
print "ip_expand elapsed: " . tv_interval($t0) . "\n";
print "ip_expand Result: $res\n";
# test inet_pton
$t0 = [gettimeofday()];
for (my $i = 0; $i < $maxcount; $i++) {
$res = join(":", unpack("H4H4H4H4H4H4H4H4",inet_pton(AF_INET6, $addr)));
}
print "inet_pton elapsed: " . tv_interval($t0) . "\n";
print "inet_pton result: " . $res . "\n";
Запуск этого на случайной машине для меня производства:
Net::IP elapsed: 2.059268
Net::IP Result: 2001:0db8:0000:0000:0000:0000:0000:0001
ip_expand elapsed: 0.482405
ip_expand Result: 2001:0db8:0000:0000:0000:0000:0000:0001
inet_pton elapsed: 0.132578
inet_pton result: 2001:0db8:0000:0000:0000:0000:0000:0001
Смежные вопросы
- 1. Расширение Perl нарушает динамические нагрузки
- 2. Perl, чтобы найти расширение файла
- 3. Расширение строки с помощью рекурсии в Perl
- 4. Как проверить расширение файла с помощью Perl?
- 5. переименовать расширение текстового файла с помощью Perl
- 6. Расширение массива Perl в аргументах командной оболочки
- 7. Переменная замена/расширение - безопасный способ в perl
- 8. Расширение snmpd с perl и внутренней командой
- 9. Кто-нибудь успешно установил расширение php-perl?
- 10. Расширение строки с завершающими нулями в Perl
- 11. Расширение Chrome: как перехватить запрошенные URL-адреса?
- 12. Получить расширение с адреса электронной почты
- 13. Как получить расширение файла из URL-адреса?
- 14. Получение текущего адреса документа (расширение firefox)
- 15. Удалите расширение php-файла с URL-адреса
- 16. Расширение расширения Chrome для URL-адреса
- 17. Удалить расширение URL-адреса в iPhone
- 18. расширение .mpl в URL: технология, связанная с Perl?
- 19. Nslookup скрипт Переберите IP-адреса в Perl
- 20. Как сравнить мак-адреса в Perl
- 21. Условный оператор IP-адреса в perl
- 22. Захватить первый сегмент URL-адреса в Perl
- 23. Определение расширения видео в Perl, когда файл имеет расширение tmp
- 24. Почему perl удаляет расширение файла при перенаправлении URL через CMD?
- 25. perl: расширение кода для получения конкретной информации с сайта
- 26. Удалить расширение файла и путь из строки в Perl
- 27. Как принудительно увеличить расширение «.html» после URL-адреса через .htaccess?
- 28. UrlFilenameViewController, поддерживающий расширение URL-адреса в имени представления
- 29. Расширение Safari 5 для загрузки URL-адреса без окна открытия
- 30. Расширение Chrome для открытия определенного URL-адреса в другом браузере
и 'Net :: IP' чисто-Perl. Мне нравятся чистые модули. –
'$ ip = Net :: IP :: ip_expand_address ('2001: db8 :: 1', 6);' будет делать для меня, нет необходимости в дополнительном объекте. – user562374