Hacker News new | ask | show | jobs
by rbrcurtis 5633 days ago
Can you explain the "makes perl look like java" comment? how does perl look like java?
1 comments

I'm kind of kidding, but Ruby lets you do things more elegantly than you can in Perl, and with less verbosity (hence the Java comment). It's really a syntax issue that I'm talking about, but it matters a lot for readability and language usability.

Perl:

my $x = 'Apple Carrot Banana';

# sort them into an array

my @y = sort split(' ', $x);

# do we have more than 2 elements? (just a random test)

if (scalar(@y) > 2) {

  print "we've got ", scalar(@y), " elements!\n";
} else {

  print "insufficient elements. fail.\n";
}

Ruby:

x = 'Apple Carrot Banana'

y = x.split(' ').sort

if (y.size > 2)

  puts "we've got #{y.size} elements!"
else

  puts 'insufficient elements. fail.'
end

Ruby just seems more elegant to me, more programmer-friendly. YMMV.

A modern Perl programmer might write something much more elegant:

    my $x = 'Apple Carrot Banana';
    my @y = $x->split(' ')->sort;

    if (@y > 2) {
        say "we've got ${\@y->size} elements!";
    } else {
        say "insufficient elements. fail.";
    }
And one that doesn't like autobox would say:

    use 5.12.2; # enables modern features
    my $x = 'Apple Carrot Banana';
    my @y = sort split ' ', $x;

    say @y > 2 ? "we've got ${\scalar @y} elements!" 
               : 'insufficient elements. fail.';
Not everything needs to be an Object. Not every call needs to be a method call. Some people think better with procedures, some people think better with objects.

One of the reasons I personally like Perl is I can use which ever one is appropriate to the problem domain.

Edit: forgot the `sort` call.

Or ever-so-slightly lighter Perl 6 version:

    my $x = 'Apple Carrot Banana';
    my @y = $x.words.sort;

    if @y > 2 {
        say "we've got {@y.elems} elements!";
    } else {
        say "insufficient elements. fail.";
    }