Transcript of "perl-java"

1.
What Perl Programmers Should Know About Java
Beth Linker, blinker@panix.com
Abstract
The Java platform is by no means a replacement for Perl, but it can be a useful complement. Even
if you do not need to or want to use Java, you should know a bit about it and when you might choose
Java or Perl for a project.
1 Description
What should Perl programmers know about Java? It depends. Not knowing Java will not slow you down as
a Perl programmer. However, Java is a popular and rapidly growing language, so there’s a good chance that
you will ﬁnd yourself using Java systems or writing applications that need to interact with them. In some
situations, writing a Java application may be a good way to accomplish something that you cannot easily
do in Perl.
This article is not a Java language tutorial. There are plenty of those available, both in books and online
(see section 6). Instead, I want to present Java as a development platform with a special emphasis on those
aspects of Java that are most complementary to Perl. If you are aware of Java’s strengths and weaknesses,
you will know when it is potentially worth learning and when you are better oﬀ sticking with Perl.
2 What is Java?
Java is an object-oriented cross-platform programming language. Syntactically, Java looks a lot like C and
C++. However, Java diﬀers signiﬁcantly from these languages in that it provides many of the high-level
features that you are used to from Perl, such as automated garbage collection and memory allocation. Over
the past 5 years, Java has become a popular language for introductory computer science classes because
teachers can use it to teach high-level programming constructs before students are ready to wrestle with the
details of memory management.
The most important feature of Java is the Java Virtual Machine (JVM), which functions as a “sandbox” or
protected area in which Java applications are executed. This makes Java a safe language for applications that
run over a network, because the JVM can prevent Java applications from performing hostile operations like
deleting ﬁles. This is why you seldom hear about Java viruses. Java source code is pre-compiled into Java
class ﬁles that contain a cross-platform Java bytecode, which are then interpreted by the JVM at runtime.
Java applications are often distributed as .class ﬁles or in compressed form as Java ARchive (JAR) ﬁles.
The JVM can run as a stand alone application, a component of another application, or a plug-in for a web
browser. Anyone can build a JVM using Sun’s Java Virtual Machine speciﬁcation. There are several JVMs
available for Windows and Unix, including a popular one from IBM. Many other companies have built their
own JVMs for proprietary or less mainstream platforms. Ideally, a Java application will be able to run on
any system that has a JVM.
13

2.
What Perl Programmers Should Know About Java
3 A Brief History of Java
Java got its start in the research labs at Sun Microsystems and was ﬁrst unleashed on the world at large in
1995. When Sun ﬁrst released Java, its promise was “write once, run anywhere”, meaning that you could
easily port Java applications to multiple platforms. While early Java applications did run on a variety of
systems, building cross-platform GUIs that were true to each system’s native look and feel proved to be a
major challenge. Java’s performance was also an issue because, like Perl, it is an interpreted language. The
ﬁrst version of Java also introduced applets–small client-side applications that could be embedded within
Web pages and run by a JVM plug-in within the browser.
As adoption of Java increased, Sun continued to improve the language and its many supporting libraries. In
1998, the Java 2 Platform was launched. It made signiﬁcant improvements to the original Java, including
the introduction of the “Swing” GUI classes, which are now used in most Java desktop applications. Just to
keep things confusing, Java 2 began with version 1.1 of the Java Development Kit (JDK) and has continued
up to the current version, JDK 1.4. Each version of the JDK introduced new APIs and core Java libraries.
The JDK is the heart of what is often referred to as the Java 2 Standard Edition, or J2SE. Java applets and
desktop applications are usually developed using only J2SE.
In addition to the J2SE, there are two other important components of the Java platform. The Java 2
Enterprise Edition, or J2EE, is Java’s platform for enterprise computing. It is a complement of the Java 2
Standard Edition, not a substitute. It includes Web development standards and APIs such as Java Servlets
and Java Server Pages (JSP), as well as distributed computing tools like Enterprise Java Beans (EJB) and
Java Message Service (JMS). Web applications, corporate information systems, and other large-scale projects
are often developed using a combination of J2SE and J2EE.
The Java 2 Micro Edition (J2ME), launched in 2000, is a stand alone version of Java developed for small
devices. Because Sun always intended Java to run on a wide variety of processors, and they originally
developed it for embedded computing, J2ME is a natural step in the evolution of Java. J2ME is a scaled-
down version of J2SE, with many APIs removed and some new ones added. It is optimized for creating small
applications that require few resources and can easily run on cell phones, PDAs, and other small devices.
3.1 How Java Evolves
Sun Microsystems owns Java, so it controls the Java language and its licensing. In addition to determining
what goes into the core Java libraries (the JDK), Sun also certiﬁes Java implementations developed by other
companies after testing to make sure that they are proper implementations of the platform. This is an
important aspect of maintaining Java’s portability. In 1997, Sun ﬁled a lawsuit against Microsoft in which
they alleged that Microsoft’s implementation of Java was incompatible with non-Microsoft systems. With
the exception of that dispute (which was settled in January, 2001), Java licensing has not been a major
source of contention.
While Sun provides the majority of resources to develop Java, other companies also participate through
the Java Community Process (JCP). Companies and individuals can join the JCP and participate in the
drafting of Java Speciﬁcation Requests (JSRs). Members of the public are able to review and comment on
JSRs before they become oﬃcial Java standards. Many important parts of the Java platform, including
J2ME, Java Servlets, and Java’s XML libraries have been developed through the Java Community Process.
The Perl Review ( 0 , 5 ) · 14

3.
What Perl Programmers Should Know About Java
4 A Glimpse of the Java Programming Language
As a Perl programmer, your ﬁrst impression of Java source code may be that it is terribly verbose. You
would be right. The only place you will encounter Java Golf is at resorts in Indonesia. To illustrate, I show
the standard Hello World program written in Perl in code listing 12 and the same program written in Java
in code listing 13.
Code Listing 12: Perl Hello World
1 #!/usr/bin/perl
2 print "Hello world!n";
Code Listing 13: Java Hello World
1 public class HelloWorld extends Object{
2 public static void
3
4 main(String[] args){
5 System.out.println("Hello world!");
6 }
7 }
The Java version requires you to put even the simplest code into a class structure. Our class, HelloWorld,
extends the java.lang.Object class (the words “extends Object” could have been omitted in this example,
because Object is the default base class for any Java classes that do not have a base class explicitly speciﬁed).
The HelloWorld class contains a static method called “main” that takes an array of Strings as input. Java
looks for the “main” method when you type “java HelloWorld” on the command line (after compiling
HelloWorld.java into a bytecode ﬁle named HelloWorld.class). At least one class in an application must have
a main() method with this signature so that it can serve as the entry point into the application. This class
contains a single method implementation, but classes can also contain constant and variable declarations as
well as special methods called constructors that are used to create new instances of the class.
This example’s print statement is also much longer than its Perl counterpart. Perl’s print function defaults
to the current system output stream. In Java, the system output stream is a PrintStream object named
“out” that is attached to the application’s System object and I need to reference it explicitly.
4.1 How Java Applications are Organized and Distributed
All Java applications consist of one or more classes. You can organize classes into packages. A package is a
group of classes that reside in the same directory. Java organizes classes hierarchically. For example, all pack-
ages in the core J2SE library begin with the name “java”. The Java string class is named “java.lang.String”
and the Java equivalent of a FILE pointer is named “java.io.File”.
Applications classes usually have their own hierarchies. By convention, publishers of Java software name
their class hierarchy after its home on the Internet. For example, Java classes released by the Apache
Software Foundation belong to the “org.apache.*” hierarchy. This naming convention minimizes the risk of
The Perl Review ( 0 , 5 ) · 15

4.
What Perl Programmers Should Know About Java
naming conﬂicts when an application combines modules from diﬀerent sources. While two classes may have
the same name, their fully qualiﬁed package names will be diﬀerent.
The other important function of packages is that you can use them to control access to parts of a class.
While you can declare a method or variable in a class “public” (accessible by all) or “private” (accessible by
none), the default is to make it accessible to other classes in its package.
You can distribute Java applications in a number of diﬀerent ways, but the most popular involve distributing
class ﬁles in a compressed archive. The JAR (Java Archive) ﬁle contains a set of class ﬁles and some packaging
information. In addition to Java class ﬁles, JAR ﬁles can include graphics and audio ﬁles and other assets
used by the application. JAR ﬁles can also be digitally signed for security purposes. A JAR ﬁle can also be
made executable, enabling the user to launch the application by running it.
4.2 How Java Compares to Perl
Now that you have gotten a look at Java, I outline how it might compare to Perl if you were trying to choose
the right language in which to write a new application. The great thing about this choice is that most of the
time you can’t go wrong. There are many projects that could be built equally well using either Java or Perl.
You can use both languages to write reliable and maintainable code. The performance overhead of the JVM
and the performance overhead of the Perl interpreter are roughly equivalent. So when is it advantageous to
use Java, when should you stick with Perl, and when might it make sense to combine the two?
4.2.1 Java’s Strong Points
Implementing an object-oriented solution
By design, Java is a purely object-oriented language. While Perl and C++ make it easy to blend object-
oriented and procedural programming styles, Java supports object-oriented design at the expense of
procedural solutions. This is frustrating when part of a program is really just a simple sequence of
steps and it feels excessive to design one or more classes around it. But when faced with a set of
requirements for which an object-oriented solution seems like a natural ﬁt, Java is a great choice. Java
provides more design options (interfaces, abstract classes, etc.) and more levels of access control (the
package system) than Perl, making it easier to implement the right object-oriented design. Java’s
strong typing of objects also makes it easier to enforce rules about what can or cannot be done with
data in the system.
Building easy-to-deploy client applications, especially on the Web
Java is a great language for small client applications. This includes applets, which can run within a Web
browser, as well as distributed computing clients and other small applications intended for widespread
distribution. Because JVMs are available for many platforms and are likely to be installed on many
computers already, end users can download and run your Java application easily. The security features
of the JVM and the ability to digitally sign JAR ﬁles mean that users can trust your Java application
not to damage their system by deleting ﬁles or spreading viruses.
Building cross-platform GUI applications
Java is also a great language for cross-platform desktop applications. Java’s core desktop GUI compo-
nents, the Swing classes, provide all of the native code required to manage windows and other elements
on most popular desktop systems. You can conﬁgure a Java desktop application to run with the user’s
native system look-and-feel or Swing’s own look-and-feel. While users are divided about the merits
of the Swing look-and-feel, Java has indisputably made very signiﬁcant progress on the GUI front
The Perl Review ( 0 , 5 ) · 16

5.
What Perl Programmers Should Know About Java
since its introduction. Still, Java is only recommended for GUIs where portability is more important
than performance. Although Java has been used for games with some success (some of Yahoo!’s most
popular online games are written in Java), most Java desktop application are slower than their native
counterparts.
Doing intensive work with RDBMS systems
Java and Perl both provide great basic services for working with relational database systems. Java’s
JDBC and Perl’s DBI are good choices for an application that needs to store or retrieve some data
using SQL. However, Java oﬀers some additional tools for applications that are heavily data-driven.
Within the database itself, companies are beginning to use Java as a replacement for proprietary stored
procedure languages. Oracle’s 9i database and application server put a JVM into the database itself
and introduced tools that make it easy to store Java objects in a database.
Outside of the database, Java also oﬀers two very useful frameworks for database work. Entity Beans,
part of the J2EE Enterprise Java Beans standard, make it easy to build objects that represent entities
within the database. Programmers can work with these objects instead of embedding SQL directly
into their code when they need to store or retrieve data. This isolates the impact of schema changes to
only a few places within the application. Java Data Objects (JDO) is another speciﬁcation developed
by the Java Community Process. JDO lets you write database-independent classes to represent your
data and then use deployment descriptors to control the persistence of the data to a RDBMS or XML
datastore. Unlike Oracle’s tools, you can use both Entity Beans and JDO with database systems from
many vendors.
Building applications for wireless devices
The Java 2 Micro Edition (J2ME) is a great platform for building wireless applications. Many manu-
facturers of PDAs, mobile phones, and other wireless devices have begun including J2ME support over
the past year. While J2ME devices use scaled-down versions of the JVM and the core Java libraries,
they can be built with a standard Java compiler. Sun provides free tools and emulators for mobile
development and a developer who knows standard Java can easily pick up J2ME basics. Because of
the storage and bandwidth limitations of mobile devices, it is much easier to take advantage of existing
J2ME support than to build mobile applications in Perl.
4.2.2 Perl’s Strong Points
Implementing a procedural or hybrid solution
As mentioned above, Java is great for pure object-oriented design. it is also possible to use Java for
procedural programming, but such programs often seem slightly awkward because all Java code has to
be part of a class. If you only need to use classes in part of a program, Perl will give you much more
ﬂexibility.
Working with the Unix shell
Because Sun designed Java to be a portable, cross-platform language it does not provide great tools
for accessing the Unix shell. You can use Java’s Runtime and Process objects to execute non-Java
programs from within a Java application, much like Perl’s “system” and “exec” functions, but with
considerably more hassle.
Regular Expressions
Java did not have a core regular expression library until the current version, JDK 1.4, was released
last year. The java.util.regex package makes it possible to do a lot, but not all, of what you can do
in Perl. The API documentation for the java.util.regex.Pattern class contains a good summary of
The Perl Review ( 0 , 5 ) · 17

6.
What Perl Programmers Should Know About Java
the diﬀerences between the two. But while Java is now at least competitive in the regular expression
ﬁeld, the syntax for pattern matching is still unwieldy. The Java example in code listing 14 lacks the
simplicity of its Perl equivalent in code listing 15:
Code Listing 14: Java regular expression
1 Pattern p = Pattern.compile("a*b");
2 Matcher m = p.matcher("aaaaab");
3 if (m.matches()){
4 System.out.println("matched!");
5 }
Code Listing 15: Perl regular expression
1 if ("aaaaab" =~ /a*b/){ print "matched!n"; }
While I generally do not mind the relative verbosity of Java, it is arguably a liability in code that
parses text. Java’s regular expressions are tremendously useful on occasion, but they are still a step
down if you are accustomed to working with Perl’s regular expression features.
4.3 Interoperability
Right now, building Perl and Java programs that can interact is a diﬃcult proposition. Java provides the
Java Native Interface and development tools to make it easy to access C code from a Java application, but
there is no similar facility for Perl. On the reverse side, the current version of the Perl interpreter does not
have facilities for accessing Java objects.
Fortunately, future developments in this area look good. Parrot, the next version of the Perl interpreter,
represents a move to a virtual machine architecture that is conceptually similar to the JVM. With the emer-
gence of Perl 6, Perl and Java programmers should be able to write more interoperable code, including both
Perl programs that use Java objects and Java programs that use Perl objects. Python and Java developers
already enjoy the ability to do this using Jython, a Java-compatible version of the Python interpreter.
5 Conclusion
Perl and Java are both great languages and there is no need to argue over which one is superior. Each has
some great strengths as well as some areas in which it is not the best choice. By knowing what Java oﬀers,
you can make good decisions about when to take advantage of its beneﬁts. See the references listed below
for more information on Java.
6 References
“The Java Tutorial” (http://java.sun.com/docs/books/tutorial/): Sun’s online tutorial is a good overview
of the Java language. It is also available as a book.
The Perl Review ( 0 , 5 ) · 18

7.
What Perl Programmers Should Know About Java
Thinking in Java by Bruce Eckel is slightly out-of-date but provides a great introduction to object-oriented
concepts in Java.
http://java.sun.com is Sun’s oﬃcial Java web site
http://www.jcp.org is the web site of the Java Community Process
http://www.onjava.com is a great Java resource from O’Reilly
http://www.jython.org is the Jython web site
7 About the author
Beth Linker is a Java developer at a Boston-based startup company and a volunteer copy editor for The Perl
Review.
The Perl Review ( 0 , 5 ) · 19