README for tv New! Improved! As Seen On TV!! ahem. tv is a command bundled with Test::Verbose that puts an easier, smarter interface around the ExtUtils testing system. Aside from easing debugging access (see below), the main use of tv is to run test scripts in verbose mode, either by naming them or by naming a source file, like Foo.pm, and letting tv find the appropriate test scripts to run. This means you can run something like :!tv % from your vi flavored editor to test the file your currently editing, whether it's a test script or a Perl module. (note: gvim, at least, replaces the % with the path to the current buffer's filename). It's been many years since I used emacs much, but M-x eval-expression RET (defun tv-buffer() (interactive "*") (shell-command (concat "tv " buffer-file-name)))RET M-x global-set-key C-x t tv-buffer RET seems to map the Cx-t command to run the tv command appropriately. Thanks to Walt Mankowski for helping me figure that out. John Fetkovich contributes this snippet for .emacs files: (defun save-and-tv-buffer () "Save buffer, then run the tv command on the saved file." (interactive) (save-buffer) (shell-command (concat "tv " buffer-file-name)) ) (defun my-cperl-mode-hook () (local-set-key "\C-ct" 'save-and-tv-buffer) ) (add-hook 'cperl-mode-hook 'my-cperl-mode-hook) Similarly, you might want to macro-ize the vim solution and keymap it, and you might want to have either of those solutions save the buffer first. If you configure other editors to do this sort of thing, please email a description like the above to barries@slaysys.com . When passed the name of a perl source module, tv will run it through podchecker and perl -Ilib -cw $module_name before running the "make test" for it. The former is to prevent POD errors, the latter gives you immediate feedback because "make test" can take a while to build blib on larger distributions. Yes, the -Ilib assumes that you keep all modules under lib as I do (there are several reasons to do that, tv's just adding one more :). tv can be patched in the future to make that more flexible. Anyway, tv allows you to run test scripts explicitly: $ tv t/foo.t # make test TEST_VERBOSE=1 TEST_FILES=t/foo.t $ tv t/foo.t t/bar.t # make test TEST_VERBOSE=1 "TEST_FILES=t/foo.t t/bar.t" $ tv t/* # Run all test scripts in t or based on a module: $ tv lib/Foo.pm # Run all t/*.t test scripts for Foo.pm $ tv lib # Test all modules in lib When passed a name like *.pm or *.pl, tv looks at the "use" and "require" lines in the test scripts to figure which to run. If this scanning is insufficient, it also supports a POD directive in the source file (Foo.pm, say): =for test_scripts t/foo.t and in the test scripts =for file lib/Foo.pm # in honk.t lets tv Foo.pm find honk.t =for package Foo::Baz # in woof.t lets tv Blah.pm find woof.t # if Blah.pm declares package Foo::Baz So far there's no way to defeat the scan, either by disabling it or partially cancelling it out, but that can be added if necessary. To run things in the debugger: $ tv -d t/foo.t # turn on the debugger in NonStop mode $ tv -dd t/foo.t # turn on the debugger and stop (like perl -d) (the -d is meant to be used in conjuction with $DB::single=1 or your friendly neighborhood interrupt key, since you usually want to stop in the code under test, not in the test suite). If it can't find any tests, $ tv --ext-utils # Don't use make, use ExtUtils::Command::MM directly We now return you to your regularly scheduled broadcast.