my $name = "John";
my $age = 25;
my $pi = 3.14;
my $undef; # undefined my @nums = (1, 2, 3, 4, 5);
my @mixed = ("a", 1, 2.5);
my $first = $nums[0];
my $len = scalar @nums; # or $#nums + 1
push @nums, 6;
pop @nums;
shift @nums;
unshift @nums, 0; my %person = (
name => "John",
age => 25,
);
my $name = $person{name};
$person{city} = "NYC";
delete $person{age};
my @keys = keys %person;
my @vals = values %person; my $scalar_ref = \$name;
my $array_ref = \@nums;
my $hash_ref = \%person;
# Dereference
print $$scalar_ref;
print @$array_ref;
print %$hash_ref;
# Arrow notation
print $array_ref->[0];
print $hash_ref->{name}; my $str = "Hello";
my $len = length($str);
my $upper = uc($str);
my $lower = lc($str);
my $sub = substr($str, 0, 3); # "Hel"
my $idx = index($str, "l"); # 2
my $concat = $str . " World"; my $name = "John";
print "Hello, $name!\n"; # Interpolates
print 'Hello, $name!\n'; # Literal
print "Array: @nums\n"; # Interpolates array
print "Hash key: $person{name}\n"; my $text = <<END;
This is a
multi-line
string.
END if ($x > 10) {
print "big";
} elsif ($x > 5) {
print "medium";
} else {
print "small";
} unless ($logged_in) {
print "Please login";
}
# Same as: if (!$logged_in) my $status = $age >= 18 ? "adult" : "minor"; print "Hi" if $greet;
print "Error" unless $valid;
print $_ for @items; for my $i (0..9) {
print "$i\n";
}
foreach my $item (@items) {
print "$item\n";
}
# C-style
for (my $i = 0; $i < 10; $i++) {
print "$i\n";
} while ($x < 10) {
$x++;
}
until ($x >= 10) {
$x++;
}
# do-while
do {
$x++;
} while ($x < 10); for my $i (1..10) {
next if $i % 2 == 0; # skip even
last if $i > 7; # break
redo if $retry; # restart iteration
print "$i\n";
} if ($str =~ /pattern/) {
print "Match!";
}
if ($str !~ /pattern/) {
print "No match";
}
# Case insensitive
if ($str =~ /pattern/i) { } if ($str =~ /(\w+)@(\w+)/) {
my $user = $1;
my $domain = $2;
}
# Named captures
if ($str =~ /(?<user>\w+)@(?<domain>\w+)/) {
print $+{user};
} $str =~ s/old/new/; # First occurrence
$str =~ s/old/new/g; # Global
$str =~ s/old/new/gi; # Global, case insensitive
# Transliteration
$str =~ tr/a-z/A-Z/; # Uppercase my @words = split /\s+/, $str;
my @parts = split /,/, $csv;
my $str = join ", ", @words; sub greet {
my ($name) = @_;
return "Hello, $name!";
}
my $msg = greet("World"); sub add {
my ($a, $b) = @_;
return $a + $b;
}
# Default values
sub greet {
my ($name, $greeting) = @_;
$greeting //= "Hello";
return "$greeting, $name!";
} sub min_max {
my @nums = @_;
my $min = (sort { $a <=> $b } @nums)[0];
my $max = (sort { $b <=> $a } @nums)[0];
return ($min, $max);
}
my ($min, $max) = min_max(3, 1, 4, 1, 5); my $add = sub {
my ($a, $b) = @_;
return $a + $b;
};
print $add->(2, 3); open(my $fh, "<", "file.txt") or die "Cannot open: $!";
while (my $line = <$fh>) {
chomp $line;
print "$line\n";
}
close($fh);
# Read entire file
my @lines = <$fh>;
my $content = do { local $/; <$fh> }; open(my $fh, ">", "file.txt") or die "Cannot open: $!";
print $fh "Hello, World!\n";
close($fh);
# Append
open(my $fh, ">>", "file.txt") or die $!; -e $file # exists
-f $file # regular file
-d $file # directory
-r $file # readable
-w $file # writable
-s $file # size (bytes)
-z $file # zero size cpan Module::Name | 모듈 설치 |
cpanm Module::Name | cpanminus로 설치 |
perl -MCPAN -e shell | CPAN 셸 |
use strict;
use warnings;
use Data::Dumper;
use File::Path qw(make_path remove_tree);
use JSON qw(encode_json decode_json); # MyModule.pm
package MyModule;
use strict;
use warnings;
use Exporter qw(import);
our @EXPORT_OK = qw(hello);
sub hello {
my ($name) = @_;
return "Hello, $name!";
}
1; # Module must return true