DEV Community

Alex Martínez
Alex Martínez

Posted on • Edited on

#12in24: Learning Perl in 4h.

The title is pretty clickbaiting. But read me out: Yes, you can learn a new language in just 4 hours. Other thing is mastering it...

So, as this is the first language of my #12in24, I wanted to start small. I will use this video to learn the basics: Perl Programming Course for Beginners.

The basics

File structure

#!/usr/bin/env perl
# Good ol' shebang

use strict; # This does not allow execution if errors
use warnings; # This prints the errors in console

print "DEV community is cool!"; # The actual program

1; # Not always present, indicates that compilation succeeded
# Don't forget ; at the end of the lines
Enter fullscreen mode Exit fullscreen mode

Data types: Scalars

my $number = 1;
my $decimal = 3.14;

print $number + $decimal; # 4.14
print $number - $decimal; # -2.14
# ...

my $string = "Follow me "; 
my $string2 = "on dev.to!";

print $string . $string2; # Follow me on dev.to!

# Variables are case sensitive
my $variable = 1;
# is different to
my $Variable = 1;

# To declare a global variable
our $global_variable = 5;
Enter fullscreen mode Exit fullscreen mode

Bugs Bunny Communist declaring a global variable in Perl

Data types: Arrays

my @array = (
    1,
    "two",
    3.14
);

print @array;
# $VAR1 = 1;
# $VAR2 = "two";
# $VAR3 = "3.14";

print $array[0]; # This will print 1
my $size = @array; 
print $size; # This will print $VAR1 = 3;

my @array2 = ( 3 .. 7 );
# $VAR1 = 3;
# $VAR2 = 4;
# $VAR3 = 5;
# $VAR4 = 6;
# $VAR5 = 7;
# If you use (  "a" .. "d" ) it will print each letter from a to d
# You can use it for array indexes as well

push @array2, 8; # Adds number 8 to the array
pop @array; # Removes last element
shift @array; # Removes first element
unshft @array, 0; # Adds element at the beginning
Enter fullscreen mode Exit fullscreen mode

Subroutines

sub my_function {
    $hi = "Hello";
}
print my_function(); # This will print Hello

sub my_name( $name ) {
    print $name;
}
my_name("Alex"); # This will print Alex
Enter fullscreen mode Exit fullscreen mode

Conditionals

$test = 3;

if ( $test > 1 ) {
    print "Hi!";
} 
elsif ( $test < 4 ) {
    print "How are you?";
}
else {
    print "Goodbye!";
}
Enter fullscreen mode Exit fullscreen mode

Loops

$test = 0;

while ( $test < 5 ) {
    print "Count: $test";
    $test++;
} 
# Count: 0
# Count: 1
# Count: 2
# Count: 3
# Count: 4

for ( my $count = 0; $count < 3; $count++; ) {
    print "Hello"
}
# Hello
# Hello
# Hello
Enter fullscreen mode Exit fullscreen mode

The video covers way more than this, I know, but these are the basics. With a little help of the documentation, I will be fine for the next sections.

Practice

Now, I will put my knowledge to test using Exercism.

Starting here!

Hello World

Hello World in Perl on Exercism

Can you solve Hello World in Perl? Improve your Perl skills with support from our world-class team of mentors.

favicon exercism.org

I must say that Exercism complicates way too much the exercises. But anyway, it's not bad to practice.

Project

I wanted to do something related to Cybersecurity but not too complex as I am new to Perl. After some deliberation, I came up with this:

A very simple SQLi Vulnerability Finder. It is simple as it is just a PoC but can be enhanced to be usable just by adding payloads and places to check.

#!/usr/bin/env perl

use strict;
use warnings;
use LWP::UserAgent;

sub check_sql_injection {
    my ($url) = @_;

    my $payload = "' OR '1'='1";
    my $test_url = $url . "?id=" . $payload;

    my $ua = LWP::UserAgent->new;
    my $response = $ua->get($test_url);

    if ($response->content =~ /error in your SQL syntax/i) {
        return "Vulnerable to SQL Injection: $url";
    } else {
        return "Not Vulnerable: $url";
    }
}

# Prompt the user for the target URL
print "Enter the target URL: ";
my $target_url = <STDIN>;
chomp $target_url;  

# Example usage:
my $result = check_sql_injection($target_url);
print $result, "\n";
Enter fullscreen mode Exit fullscreen mode

Hope you enjoyed it! See you next month learning COBOL.

Top comments (0)