Архив рубрики: вредные советы

Из-под отладчика

В перловых скриптах (во всяком случае, в тех, что запущены в юниксоподобных системах) определить, запущены ли они из-под отладчика, достаточно просто — надо проверить, существует ли переменная окружения PERLDB_PIDS:

my $DEBUG = exists $ENV{PERLDB_PIDS};

Однако в отладчике, встроенном в Komodo IDE 8.5, такой способ не работает — вместо PERLDB_PIDS устанавливается другая переменная PERL5DB со значением, например, BEGIN { require '/opt/komodo/lib/support/dbgp/perllib/perl5db.pl' }. А в штатном отладчике переменной PERL5DB нет. Значит, надо проверять обе:

my  $DEBUG
    =  exists $ENV{PERLDB_PIDS}
    || exists $ENV{PERL5DB};

update/20.11.2014: И снова товарищи подсказывают — есть переменная $^P. Проверил — работает везде.

Смотрим размер файла в бесконечном цикле

Для подсчёта количества байт, символов, слов и строк в юникосоподобных операционных системах предназначена программа wc. Иногда хочется запускать её, например, раз в секунду, чтоб следить за выполнением какого-нибудь долгого процесса.

Сделал по-быстрому скрипт, который просто вызывает wc и выводит его результат, пока пользователю не надоест и он не нажмёт Ctrl+C

#!/usr/bin/perl

print STDERR "Press ^C to exit\n";
my $cmd_line = 'wc ' . join ' ', @ARGV;
my $out;
while (1) {
    $out = `$cmd_line`;
    chomp $out;
    print "\cM$out";
    sleep 1;
}

Запустить можно, например, так:

wcloop -l some-big-file.txt

update/19.11.2014: Мне подсказали пару других, более изящных методов:

Командой watch:

watch -n 1 wc -l ФАЙЛ

Без watch, циклом на баше:

while true; do wc ФАЙЛ | tr '\n' '\r'; sleep 1; done