PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 67


$code .= "s{\\Q$in\\E}{$out}g";

$code .= "&& printf STDERR qq($in => $out at \$ARGV line \$.\\n)M

if $verbose;

$code .= ";\n";

 

$code .= "printf;

\n}\n";

eval "{ code }

1"

II die;

__END__

analysed

=>

analyzed

built-in

=>

builtin

chastized

=>

chastised

commandline

=>

command-line

de-allocate

=>

deallocate

dropin

=>

drop-in

hardcode

=>

hard-code

meta-data

=>

metadata

multicharacter

=>

multi-charac

multiway

=>

multi-way

non-empty

=>

nonempty

non-profit

=>

nonprofit

non-trappable

=>

nontrappable

pre-define

=>

predefine

preextend

=>

pre-extend

re-compiling

=>

recompiling

reenter

=>

re-enter

turnkey

=>

turn-key


60   Глава 1 • Строки

Небольшое предупреждение: программа работает быстро, но не в тех случаях, когда количество замен измеряется сотнями. Чем больше секция DATA, тем боль­ше времени потребуется. Несколько десятков замен не вызовут существенного за­медления. Более того, для малого количества замен эта версия работает быстрее следующей. Но если запустить программу с несколькими сотнями замен, она нач­нет заметно отставать.

В примере 1.5 приведена следующая версия программы. При малом количестве замен она работает медленнее, а при большом — быстрее.

Пример 1.5. fixstyle2

#'/usr/bin/perl -w

0 fixstyle2 = аналог fixstyle для большого количества замен

use strict

my Sverbose = (@ARGV && $ARGV[O] eq -v && shift),

my $change = (),

while (<DATA>) {

chomp,

my ($m, $out) = split /\s*=>\s«/,

next unless $in && $out,

$change{$in} = $out, } if (@ARGV) {

$"I =  orig , } else {

warn    $0-  Reading from stdm\n    if -t STDIN,

while (<>)  { my $i =0,

s/~(\s+)// && print $1,        0 Выдать начальный пропуск for (split /(\s+)/,  $_,   -1)  {




Начало  Назад  Вперед