Архив метки: perl

Perl Debugger Cheatsheet

Чтоб не вспоминать кажыдй раз команды перлового отладчика, сделал шпаргалку — скопировал на лист размера A4 текст, выводимый отладчиком по команде h, и добавил верблюда:

Perl Debugger Cheatsheet

Большой файл доступен в форматах PDF и PNG (300 dpi).

Без лишних движений мышью

Отлаживаю скрипт, получаю развесистую структуру данных, чей дамп, сделанный модулем Data::Dumper, занимает почти 9000 строк. Вывел дамп на экран, потянулся к мышке, чтоб скопировать и засунуть в файл, да вовремя остановился — есть же простой метод: достаточно написать в отладчике всего пару строк:

use File::Slurp
write_file 'big-structure.pl', Dumper $structure

P. S. А если вместо Data::Dumper использовать Data::Dumper::Perltidy, результат получается более симпатичным.

Не zip

На сайте prostopleer.com есть, вроде бы, возможность скачать целиком музыкальный альбом. Но потом — сюрприз! — скачавшийся zip-файл вовсе не является ZIP-архивом: ни unzip, ни 7z не желают его открывать. Лишь всемогущий mplayer спокойно играет одну пьесу за другой.

Анализ содержимого показал: в начале архива идёт стандартная сигнатура PK♥♦ (50 4B 03 04), но за ней — имена файлов вместе с мусором и сами файлы, без какого-либо сжатия. Достать музыку из такого файла при наличии перла — легко!

#!/usr/bin/perl -0777 -n

=head1 DESCRIPTION

Split big pseudo zip-archive from prostopleer.com into small mp3 files.

=head1 USAGE

 ./split.pl big-pseudo.zip

=head1 SEE ALSO

L<< https://gist.github.com/shoorick/7785185 >>

=head1 AUTHOR

Alexander Sapozhnikov
L<< http://shoorick.ru/ >>
L<lt>shoorick@cpan.orgE<gt>

=cut

binmode(STDIN);

my $divisor = "ID3\x04\x00";
my @chunks = split $divisor;
shift @chunks;

my $i = 1;
foreach my $chunk ( @chunks ) {
    open(my $fh, '<', sprintf('%02d.mp3', $i++))
        or die "cannot open for writing: $!";
    print $fh $divisor, $chunk;
    close $fh;
}

Оно же — на гитхабе: https://gist.github.com/shoorick/7785185

Без звёздочек

У Subversion (во всяком случае, у линуксовой версии 1.7) есть странная на первый взгяд особенность: свежедобавленные PHP-файлы при первом же коммите получают свойство svn:executable и становятся исполняемыми, что вовсе не требуется. Предполагая, что это не баг, а фича, заглянул в конфигурационный файл ~/.subversion/config — так и есть. Subversion может выставлять некоторые свойства свежедобавленным файлам. Такое поведение можно настроить. Во-первых, глобально включить — нужный параметр находится в секции [miscellany]:

### Set enable-auto-props to 'yes' to enable automatic properties
### for 'svn add' and 'svn import', it defaults to 'no'.
### Automatic properties are defined in the section 'auto-props'.
enable-auto-props = yes

Во-вторых, настроить, какие именно свойства надо установить:

### Section for configuring automatic properties.
[auto-props]
### The format of the entries is:
### file-name-pattern = propname[=value][;propname[=value]...]
### The file-name-pattern can contain wildcards (such as '*' and
### '?'). All entries which match will be applied to the file.
### Note that auto-props functionality must be enabled, which
### is typically done by setting the 'enable-auto-props' option.
# *.c = svn:eol-style=native
# *.cpp = svn:eol-style=native
# *.h = svn:eol-style=native
# *.dsp = svn:eol-style=CRLF
# *.dsw = svn:eol-style=CRLF
*.pl = svn:eol-style=native;svn:executable
*.pm = svn:eol-style=native
*.php = svn:eol-style=native

В моём случае и для перловых модулей, и для PHP-файлов среди свойств значилось svn:executable — убрал.