Perl Needs Better Tools
by Matisse Enzer
|
Pages: 1, 2, 3, 4, 5, 6
Rename Subroutine/Method
The IDE should find all the calls to the subroutine throughout your project and offer to change them for you. You should be able to see a preview of all of the places a change could occur, and to accept or reject each one on a case-by-case basis. The action should be undoable.
Rename Variable
Like Rename Subroutine, this feature should find all occurrences throughout the project and offer to make the changes for you.
Change Subroutine/Method Signature
The IDE should be able to make reasonable guesses about whether each subroutine or method call is supplying the proper parameters. Partly this is to enable the real-time syntax checking mentioned above, and partly this is to enable you to select a subroutine declaration and tell the IDE you want to refactor it by adding or removing a parameter. The IDE should then prompt you for the change(s) you want to make, do its best to find all of the existing calls to the subroutine, and offer to correct the subroutine calls to supply the new parameters.
Obviously, this is an especially tricky thing to do in Perl, where
subroutines fish their parameters out of @_. So the IDE would have
to look carefully at how the code uses shift, @_, and
$_[] in order to have a reasonable guess about the parameters the
subroutine is expecting. In many common cases, though, a Perl IDE could make a
reasonable guess about the parameters, such as in the following two examples,
so that if you added or removed one, it could immediately prompt you about
making corrections throughout the project:
sub doSomething {
my $gender = shift;
my $age = shift;
# Not too terribly hard to guess that $gender and $age are params
}
sub anotherThing {
my ($speed,$direction) = @_;
# No magic needed to guess $speed and $direction are params.
}
Move Subroutine/Method
This refactoring operation should give you a list or dialog box to choose
the destination file in your project. The IDE should allow you to preview all
of the changes that it would make to accomplish the move, which will include
updating a call to the subroutine/method to use the proper class. At a minimum,
the IDE should show you or list all of the calls to the subroutine so you can make
the appropriate changes yourself. Ideally, the IDE should make a guess about
possible destinations; for example, if $self is a parameter to the
method being moved, then the IDE might try assuming the method is an object
(instance) method and initially only list destination classes that inherit from
the source class, or from which the source class inherits.
Change a Package Name
As with Rename Subroutine and Rename Variable, when changing a package name, the IDE should offer to update all existing references throughout your project.
Tree View and Navigation of Source Files and Resources
Another useful feature of good IDEs is being able to view all of the code for a project, or multiple projects, in a tree format, where you can "fold" and "unfold" the contents of folders. All of the modern graphical IDEs support this, even with multiple projects in different languages.
Being able to view your project in this manner gives you both a high-level overview and the ability to drill down into specific files, and to mix levels of detail by having some folders show their contents and some not.
For example, Figure 8 shows a partial screen shot from ActiveState's Komodo IDE.

Figure 8. Tree view of code in Komodo
Support for Creating and Running Unit Tests
Anyone who has installed Perl modules from CPAN has seen unit tests--these
are the various, often copious, tests that run when you execute the make
test part of the installation process. The vast majority of CPAN modules
include a suite of tests, often using the Test::Harness and/or Test::More modules. A good
IDE will make it very easy to both create and run unit tests as you develop
your project.

