Код Perl для очистки: my $ export = $ doc; $ export = ~ s: \. odt: \. pdf :; - PullRequest
1 голос
/ 02 июня 2010

Фрагмент Perl-кода:

my $export = $doc;
$export =~ s:\.odt:\.pdf:;

Как бы это было написано чище? Не просто то, что 900 других способов написать это, TMTOWTDI .

Ответы [ 3 ]

10 голосов
/ 02 июня 2010

my ($export = $doc) =~ s{\.odt}{\.pdf};

ОБНОВЛЕНИЕ: Это решение не компилируется (обратите внимание на себя: проверить перед публикацией на SO). Вместо этого вы могли бы сказать

(my $export = $doc) =~ s{\.odt}{\.pdf};
7 голосов
/ 02 июня 2010

Я иду на [.], чтобы соответствовать буквальному периоду:

$export ~= s{[.]odt$}{.pdf};

Обратите внимание, что только первая половина вызова s/// является регулярным выражением. Замена - это обычная строка, для которой не требуется экранировать точку.

Возможно, вы захотите представлять файлы как объекты, а не как строки, используя Path :: Class .

0 голосов
/ 04 июня 2010

my% ext = ('odt' => 'pdf' и т. Д.); (my $ export = $ doc) = ~ s {. ([^.] +) $} {'.'. ($ ext {$ 1} || $ 1})} eg;

...