diff options
| author | Zachary Ferguson <zfergus2@users.noreply.github.com> | 2015-10-07 23:53:53 -0400 | 
|---|---|---|
| committer | Zachary Ferguson <zfergus2@users.noreply.github.com> | 2015-10-07 23:53:53 -0400 | 
| commit | 342488f6a8de5ab91f555a6463f5d9dc85a3079a (patch) | |
| tree | 1afa96957269a218ef2a84d9c9a2d4ab462e8fef /perl.html.markdown | |
| parent | 4e4072f2528bdbc69cbcee72951e4c3c7644a745 (diff) | |
| parent | abd7444f9e5343f597b561a69297122142881fc8 (diff) | |
Merge remote-tracking branch 'adambard/master' into adambard/master-cn
Diffstat (limited to 'perl.html.markdown')
| -rw-r--r-- | perl.html.markdown | 165 | 
1 files changed, 165 insertions, 0 deletions
| diff --git a/perl.html.markdown b/perl.html.markdown new file mode 100644 index 00000000..4e172406 --- /dev/null +++ b/perl.html.markdown @@ -0,0 +1,165 @@ +--- +name: perl +category: language +language: perl +filename: learnperl.pl +contributors: +    - ["Korjavin Ivan", "http://github.com/korjavin"] +--- + +Perl 5 is a highly capable, feature-rich programming language with over 25 years of development. + +Perl 5 runs on over 100 platforms from portables to mainframes and is suitable for both rapid prototyping and large scale development projects. + +```perl +# Single line comments start with a number sign. + + +#### Perl variable types + +#  Variables begin with a sigil, which is a symbol showing the type. +#  A valid variable name starts with a letter or underscore, +#  followed by any number of letters, numbers, or underscores. + +### Perl has three main variable types: $scalar, @array, and %hash. + +## Scalars +#  A scalar represents a single value: +my $animal = "camel"; +my $answer = 42; + +# Scalar values can be strings, integers or floating point numbers, and +# Perl will automatically convert between them as required. + +## Arrays +#  An array represents a list of values: +my @animals = ("camel", "llama", "owl"); +my @numbers = (23, 42, 69); +my @mixed   = ("camel", 42, 1.23); + + + +## Hashes +#   A hash represents a set of key/value pairs: + +my %fruit_color = ("apple", "red", "banana", "yellow"); + +#  You can use whitespace and the "=>" operator to lay them out more nicely: + +my %fruit_color = ( +  apple  => "red", +  banana => "yellow", +); +# Scalars, arrays and hashes are documented more fully in perldata. +# (perldoc perldata). + +# More complex data types can be constructed using references, which allow you +# to build lists and hashes within lists and hashes. + +#### Conditional and looping constructs + +# Perl has most of the usual conditional and looping constructs. + +if ($var) { +  ... +} elsif ($var eq 'bar') { +  ... +} else { +  ... +} + +unless (condition) { +  ... +} +# This is provided as a more readable version of "if (!condition)" + +# the Perlish post-condition way +print "Yow!" if $zippy; +print "We have no bananas" unless $bananas; + +#  while +while (condition) { +  ... +} + + +# for loops and iteration +for (my $i = 0; $i < $max; $i++) { +  print "index is $i"; +} + +for (my $i = 0; $i < @elements; $i++) { +  print "Current element is " . $elements[$i]; +} + +for my $element (@elements) { +  print $element; +} + +# implicitly + +for (@elements) { +  print; +} + + +#### Regular expressions + +# Perl's regular expression support is both broad and deep, and is the subject +# of lengthy documentation in perlrequick, perlretut, and elsewhere. +# However, in short: + +# Simple matching +if (/foo/)       { ... }  # true if $_ contains "foo" +if ($a =~ /foo/) { ... }  # true if $a contains "foo" + +# Simple substitution + +$a =~ s/foo/bar/;         # replaces foo with bar in $a +$a =~ s/foo/bar/g;        # replaces ALL INSTANCES of foo with bar in $a + + +#### Files and I/O + +# You can open a file for input or output using the "open()" function. + +open(my $in,  "<",  "input.txt")  or die "Can't open input.txt: $!"; +open(my $out, ">",  "output.txt") or die "Can't open output.txt: $!"; +open(my $log, ">>", "my.log")     or die "Can't open my.log: $!"; + +# You can read from an open filehandle using the "<>" operator.  In scalar +# context it reads a single line from the filehandle, and in list context it +# reads the whole file in, assigning each line to an element of the list: + +my $line  = <$in>; +my @lines = <$in>; + +#### Writing subroutines + +# Writing subroutines is easy: + +sub logger { +  my $logmessage = shift; + +  open my $logfile, ">>", "my.log" or die "Could not open my.log: $!"; + +  print $logfile $logmessage; +} + +# Now we can use the subroutine just as any other built-in function: + +logger("We have a logger subroutine!"); +``` + +#### Using Perl modules + +Perl modules provide a range of features to help you avoid reinventing the wheel, and can be downloaded from CPAN (http://www.cpan.org/).  A number of popular modules are included with the Perl distribution itself. + +perlfaq contains questions and answers related to many common tasks, and often provides suggestions for good CPAN modules to use. + +#### Further Reading + + - [perl-tutorial](http://perl-tutorial.org/) + - [Learn at www.perl.com](http://www.perl.org/learn.html) + - [perldoc](http://perldoc.perl.org/) + - and perl built-in : `perldoc perlintro` | 
