2010-06-02 9 views
1

Perl fragment de code:

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

Comment cela serait-il écrit plus propre? Non seulement ce sont 900 autres façons de l'écrire, TMTOWTDI.

Répondre

10

 

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

MISE À JOUR: Cette solution ne compile pas (note pour plus tard: test avant l'affichage sur le SO). Au lieu de cela, vous pouvez dire

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

9 votes vers le haut n'ont pas remarqué l'erreur. –

7

Je vais pour [.] pour correspondre à une période littérale:

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

Notez que seule la première moitié de l'appel s/// est une expression régulière. Le remplacement est une chaîne normale et ne nécessite pas de période d'échappement.

Vous pouvez représenter les fichiers en tant qu'objets et non en tant que chaînes avec Path::Class.

+2

Je pense que vous voulez dire \ z, pas $. $ est rarement souhaitable. – ysth

+0

+1 pour le séparateur {} étant un peu plus facile à lire que: et la suppression de la séquence d'échappement dans la chaîne de remplacement. –

+0

'\ z' est la séquence d'échappement" Je suis un fanboi PBP ". – jrockway

0

mon% ext = ('odt' => 'pdf', etc ...); (mon $ export = $ doc) = ~ s {. ([^.] +) $} {'.'. ($ Ext {$ 1} || $ 1})} par exemple;