(defun perl-boilerplate () "Basic perl template." (interactive) (if (or (not (file-exists-p (buffer-file-name (current-buffer)))) (= 0 (buffer-size))) (let ((strictures "use warnings;\nuse strict;\n\n#use Data::Dumper;\n\n")) (cond ((string-match "\\([^/]*\\)\.pm$" buffer-file-name) (let* ((case-fold-search nil) (package-name (replace-regexp-in-string "/" "::" (replace-regexp-in-string "^.*/[^[:upper:]][^/]*/\\|\\.pm$" "" buffer-file-name)))) (insert (concat "package " package-name ";\n" "\n=head1 " package-name "\n\n=cut\n\n" strictures "\n__PACKAGE__\n")) (backward-char 14))) ((string-match "\\(?:\.\\(?:p\\(?:er\\)?l\\|t\\)$\\)\\|^[^.]+$" buffer-file-name) (insert (concat "#!/usr/bin/perl\n" strictures))))))) (add-hook 'cperl-mode-hook 'perl-boilerplate) #### package My; =head1 My =cut use warnings; use strict; #use Data::Dumper; __PACKAGE__ #### #!/usr/bin/perl use warnings; use strict; #use Data::Dumper;