Perl - специальный справочник


           

Такой метод означает выполнение всего


%perl -

print "Hello!\n";

__END__

Hello!

Такой метод означает выполнение всего сценария целиком. При тестировании эффективнее вводить команды по очереди и выполнять их в интерактивном режиме. Для этого необходимо создать мини-интерпретатор Perl (на Perl J), чем мы и займемся в следующем разделе.

Интерактивное выполнение сценариев Perl

Во время тестирования может потребоваться последовательно выполнять команды Perl по мере их ввода и наблюдать на экране результат их действия. Для этого необходимо написать Perl-оболочку. Вот небольшой работающий пример:

#!/usr/local/bin/perl5 -w # Use Perl 5 with warnings

use strict; # Require variable declarations, etc.

my $count=0; # $count used to match {}, (), etc.

my $statement=""; # statement holds multi-line commands

local $SIG{__WARN__} = sub{}; # supress error reporting

while (<>) { # Accept input from the keyboard

chomp; # Clean-up input

while (/{|\(|\[/g) {$count++}; # Watch for {, (, etc.

while (/}|\)|\]/g) {$count--}; # Watch for }, ), etc.

$statement .= $_; # Append input to current statement

if (!$count) { # Evaluate only if {, ( matches }, )

eval $statement; # Evaluate Perl statement

if ($@) {print "Syntax error.\n"}; # If error ...

$statement = ""; # Clear the current statement

$count = 0; # Clear the counter

}

}

Этот сценарий представляет собой простейшую Perl-оболочку, которая может обрабатывать составные команды, в том числе и те, что охватывают несколько строк ввода. Он работает за счет вызова функции Perl eval, которая вычисляет выражение, переданное ей в качестве аргумента. Эта программа также запоминает вводимый текст (разбитый на несколько строк ввода) до тех пор, пока число открывающих скобок не будет соответствовать числу закрывающих скобок, и лишь затем обращается к функции eval. (До некоторой степени это гарантирует, что разбитое на несколько строк выражение действительно

введено полностью. Однако внимательный читатель, безусловно, заметит, что такая оболочка не делает различия между различными типами скобок и не проверяет правильную их вложенность.) Например, можно запустить этот сценарий и ввести команду, ко


Содержание  Назад  Вперед