On Sun, Mar 09, 2008 at 08:00:43PM +0300, Dmitry V. Levin wrote: > По крайней мере, "require XML::Parser" присутствует в файлах > /usr/bin/intltool-extract > /usr/bin/intltool-merge > /usr/share/aclocal/intltool.m4 > (правда, в защищённом от perl.req виде). /usr/bin/intltool-extract: 595 sub readXml 596 { 597 my $xmldoc = shift || return; 598 my $ret = eval 'require XML::Parser'; 599 if(!$ret) { 600 die "You must have XML::Parser installed to run $0\n\n"; 601 } Зачищать зависимости таким способом, как правило, не следует. Стандартное сообщение об ошибке $ perl -e 'use asdf' Can't locate asdf.pm in @INC (@INC contains: /etc/perl5 ...) at -e line 1. BEGIN failed--compilation aborted at -e line 1. $ не намного хуже, чем user-friendly "You must have XML::Parser ...". К тому же 'require XML::Parser' может отвалить по разным причинам, а не только по той единственной причине, что XML::Parser не установлен. Здесь, правда, есть тонкости (но они не касаются >~90% случаев). Например, если в перловом исходнике стоит use (без eval/строки -- eval "use ..." это другое), то syntax check будет невозможен, если соответствующий модуль не установлен (даже eval { use ... }). "use" безусловно выполняется так скоро, как его видит парсер. Чтобы сделать syntax check возможным без установки модуля, можно заменить "use" на "require". Но "use" может опережающим образом менять прототипы функций, то есть, фактически, ->import может воздействовать на синтаксис последующего кода. Короче, в общем, этот код лучше развернуть следующим образом: вместо 598 my $ret = eval 'require XML::Parser'; 599 if(!$ret) { 600 die "You must have XML::Parser installed to run $0\n\n"; 601 } написать require XML::Parser;