а есть компиляторы в бинарник

знаю есть perl2exe и pp но это по сути к интерпретатору прикрепляет сорцы

а есть полноценные?

чтоб както преобразовал в с/c++ и потом через gcc скомпилил (через mingw для винды)

ближайшие аналоги - у python есть Nuitka,  Nim, haxe

Goodwin
  • dp_z

Поздравляю товарищи!

Вышел новый релиз perl6 Rakudo Star 2018.01.
И простейший тест из цикла со сложением целых: $s+=$x++ while $x < $y; стал работать быстрее чем в perl5.

Поздравляю товарищи!

Goodwin
  • dp_z

MoarVM performance


=================1=====================
$time perl -e 'my $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m12.047s
user 0m12.040s
sys 0m0.000s
=================2=====================
$perl6 -v
This is Rakudo version 2017.07 built on MoarVM version 2017.07
implementing Perl 6.c.
=================3=====================
$time perl6 -e 'my $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m46.730s
user 0m46.664s
sys 0m0.024s
=================4=====================
$time perl6 -e 'my Int $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m46.925s
user 0m46.840s
sys 0m0.028s
=================5=====================
$time perl6 -e 'my int $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m2.390s
user 0m2.356s
sys 0m0.028s
=================6=====================
$time perl6 -e 'my uint $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m12.103s
user 0m12.060s
sys 0m0.020s
=================7=====================
$time perl6 -e 'say (1..300000000).elems'
300000000
real 0m0.165s
user 0m0.144s
sys 0m0.020s
=================8=====================
$time perl -e '$s+=$x++ while $x < 30000000; print $s;'
449999985000000
real 0m2.336s
user 0m2.332s
sys 0m0.000s
=================9=====================
$time perl6 -e 'my int $x=0; my int $s=0; $s+=$x++ while $x < 30000000; say $s;'
449999985000000
real 0m17.609s
user 0m16.640s
sys 0m0.948s
=================10=====================
$time perl6 -e 'my uint $x=0; my uint $s=0; $s+=$x++ while $x < 30000000; say $s;'
449999985000000
real 0m21.325s
user 0m20.320s
sys 0m0.964s
=================11=====================
$time perl6 -e 'say [+] 1..29999999'
449999985000000
real 0m0.164s
user 0m0.124s
sys 0m0.036s

Мораль:  элементы быстродействия присутствуют, но странностей много (5 vs 6 и 8 vs 9)
buddha eyes

print 100.101.102

Почему perl -e 'print 100.101.102' выводит 'def'?
Понятно, что 100, 101 и 102 - это ASCII-коды символов 'd', 'e' и 'f', но почему произошло такое преобразование, почему это не то же самое, что perl -e 'print 100 . 101 . 102', как было бы ожидаемо? Или perl -e 'print 100.101 . 102' - тоже понятно.

Скорее всего, где-то в доке об этом написано, но не могу найти, так что просто покажите, не пинайте сильно.
Goodwin
  • dp_z

Быстродействие Perl6

perl6 -v This is Rakudo version 2017.01 built on MoarVM version 2017.01 implementing Perl 6.c.
perl -v This is perl 5, version 22, subversion 1 (v5.22.1) built for x86_64-linux-gnu-thread-multi
julia -v julia version 0.4.5
python -V Python 2.7.12
pypy -V Python 2.7.10 (5.1.2+dfsg-1~16.04, Jun 16 2016, 17:37:42)
[PyPy 5.1.2 with GCC 5.3.1 20160413]

time perl6 -e 'my $x=0; $x++ while $x < 30000000' real 0m11.016s
time perl6 -e 'my int $x=0; $x++ while $x < 30000000' real 0m0.380s
time perl -e '$x++ while $x < 30000000' real 0m1.321s
time julia -e 'x=0; while x<30000000; x+=1; end' real 0m2.239s
time python -c 'x=0
while x<30000000: x+=1'
real 0m2.824s
time pypy -c 'x=0
while x<30000000: x+=1'
real 0m0.054s
демон

Spreadsheet::WriteExcel - как убрать колонтитулы

Господа, вопрос такой: генериться эксель-файл в формате xls с помощью Spreadsheet::WriteExcel. Надо, чтобы на печати верхний и нижний колонтитулы были равны 0. По умолчанию там стоит 1.3 у верхнего и нижнего колонтитула.
Отступы все "как в образце" сделал с помощью set_margin_...

А вот как указать нулевые размеры для верхнего и нижнего колонтитула. Методы set_header и set_footer задают только их содержимое.

дарси

Использование модуля с генерируемым "на лету" именем.

Задача такая. Есть ряд модулей, каждый в отдельном PM-файле. Внутри модулей хранится хэш с данными, имя хэша во всех модулях одинаковое %Hash. Причем одновременно может быть загружен не один модуль.
Имена модулей имеют вид
Module_aaa.pm
Module_bbb.pm
Module_ccc.pm
...
В текущий момент я знаю. что мне нужно взять данные из модуля 'aaa' или 'ccc'. С помощью Module::Load я могу загрузить только нужные мне в текущий запуск скрипта модули. Но как мне обратиться к нужному модулю по ключу? Понятно, что напрашивается куча тернарников вида

$value = $key='aaa' ? $Module_aaa::Hash{key} : $key='bbb' ? $Module_bbb::Hash{key} :$key='ccc' ? $Module_ccc::Hash{key} : '';

Но ведь наверняка есть способ сделать это через генерацию имени для обращения. Подскажите пожалуйста, как такое лучше организовать.

Если знаете, подскажите также вариант для случая, если модуль один, а данные хранятся в нем в хэшах %Hash_aaa, %Hash_bbb и т.д.

P.S. Вариант использовать один сложных хэшей с ключами aaa, bbb, и т.д. очевиден, но тут надо в идеале, чтобы они были разнесены по разным файлам модулей с точки зрения архитектуры проекта.

ищу работу

Привет.

Есть опыт работы с нагруженными системами.
Проектно, по часам, фиксированно, как угодно ~ 500р/час
Удаленно 10-20 часов в неделю. С апреля готов работать в офисе в Москве.

Василий
thecamelsway@gmail.com