diff --git a/README.md b/README.md index e3fb194..1d132b4 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ puppet
Puppet
Distributed
Distributed
you
Questions you can ask
+ perl
Perl
@@ -5033,6 +5034,294 @@ Output: 3 [Golang container/heap package](https://golang.org/pkg/container/heap/) +## Perl + +### Perl Self Assessment + +
+What is Perl?
+ +From the official [docs](https://perldoc.perl.org/): + +"Perl officially stands for Practical Extraction and Report Language, except when it doesn't." + +It's a general purpose programming language developed for manipulating texts mainly. It has been used to perform system administration tasks, networking, building websites and more. +
+ +
+What data types Perl has? And how can we define it?
+ +- Scalar: This is a simple variable that stores single data items. It can be a string, number or reference. + +``` +my $number = 5; +``` + +- Arrays: This is a list of scalars. + +``` +my @numbers = (1, 2, 3, 4, 5); +# or using the `qw` keyword (quote word): +my @numbers = qw/1 2 3 4 5/; +# '/' can be another symbol, e.g qw@1 2 3 4 5@ +``` + +- Hashes (or associative arrays): This is an unordered collection of key-value pairs. We can access to a hash using the keys. + +``` +my %numbers = ( + First => '1', + Second => '2', + Third => '3' +); +``` + +
+ +
+How can you access to a hash value, add and delete a key/value pair and modify a hash?
+ +my %numbers = ( + 'First' => '1', + 'Second' => '2', + 'Third' => '3' +); + +- Access: +print($numbers{'First'}); +- Add: +$numbers{'Fourth'} = 4; +- Delete: +delete $numbers{'Third'}; +- Modify: +$numbers{'Fifth'} = 6; + +$numbers{'Fifth'} = 5; + +
+ +
+How can you iterate an array? And a hash?
+ +- Array: + +``` +my @numbers = qw/1 2 3 4 5/; + +# Using `$_` that represents the current iteration in a loop. It starts from index array 0 until the last index. +foreach (@numbers) { + print($_); +} +# Output: 12345 + + +# "$#" returns the max index of an array. That's the reason because we can iterate accesing to the array from the index 0 to the max index. +for my $i (0..$#numbers) { + print($numbers[$i]); +} +# Output: 12345 + + +# Using the `map` keyword: +print map {$_} @numbers; +# Output: 12345 + +# Using `while`. We should take care with this option. When we use `shift` we're deleting the first element of the array and assigning it to the `element` variable. +# After this `loop` the `numbers` array will not have elements. +while (my $element = shift(@numbers)) { + print($element); +} +# Output: 12345 +``` + +- Hashes: + + ``` + my %capital_cities = ( + 'Madrid' => 'Spain', + 'Rome' => 'Italy', + 'Berlin' => 'Germany' +); + +# Iterate and get the `keys`: +foreach my $city (keys %capital_cities) { + print($city . "\n"); +} +# Iterate and get the `values`: +foreach my $country (values %capital_cities) { + print($country . "\n"); +} + +# Iterate and get the values and keys (first option): +foreach my $city (keys %capital_cities) { + print("City: $city - Country: $capital_cities{$city}" . "\n"); +} + +# Iterate and get the values and keys (first option): +while(my ($city, $country) = each %capital_cities) { + print("City: $city - Country: $capital_cities{$city}" . "\n"); +} +``` + +
+ +
+What is a Perl subroutine? How to define it?
+ +It's the perl model for user defined functions (this is also called function like other programming languages). We can define a subroute with the keyword `sub`. + +``` +sub hello { + print "hello"; +} +``` + +
+ +
+Describe the different ways to receive parameters in a subroutine
+ +- List assignment: Using the `@_` array. It's a list with the elements that are being passed as parameters. + +``` +sub power { + my ($b, $e) = @_; + return $b ** $e; +} + +&power(2, 3); +``` + +- Individual assigment: We should access to every element of the `@_` array. It starts from zero. + +``` +sub power { + my $b = $_[0]; + my $e = $_[1]; + return $b ** $e; +} + +&power(2, 3); +``` + +- Using `shift` keyword: It's used to remove the first value of an array and it's returned. + +``` +sub power { + my $b = shift; + my $3 = shift; + return $b ** $e; +} + +&power(2, 3); +``` + + +[Source](https://stackoverflow.com/a/21465275/12771230) + +We can also read the best way in the same S.O answer. + +
+ +
+What is lexical and dynamic scoping?
+
+ +
+How to apply referencing and dereferencing?
+
+ +
+Does Perl have conventions?
+ +You can check [perlstyle](https://perldoc.perl.org/perlstyle) + +
+ +
+What is Perl POD? Can you code an example?
+ +From the official [docs](https://perldoc.perl.org/perlpod): + +"Pod is a simple-to-use markup language used for writing documentation for Perl, Perl programs, and Perl modules." + +``` +=item + This function returns the factorial of a number. + Input: $n (number you wanna calculate). + Output: number factorial. +=cut +sub factorial { + my ($i, $result, $n) = (1, 1, shift); + $result = $result *= $i && $i++ while $i <= $n; + return $result; +} +``` + +
+ +### Perl Regex + +
+How do you perform regular expresions in Perl?
+
+ +### Perl Files Handle + +
+How to write into a file?
+
+ +### Perl OOP + +
+Does Perl have support for OOP?
+ +From the official [docs](https://perldoc.perl.org/perlootut): + +"By default, Perl's built-in OO system is very minimal, leaving you to do most of the work." + +
+ +
+What is the purpose of the bless function?
+ +The function os the `bless` function is used to turning a plain data structure into an object. + +
+ +
+Does Perl have inheritance?
+
+ +
+Does Perl have polymorphism? What is method overriding?
+
+ +### Perl OS + +
+What is Perl Open3?
+
+ +### Perl Packages & Modules + +
+What is a Perl package? And a module?
+
+ +
+What is the difference between .pl and .pm extensions?
+
+ +
+What is cpan? And cpanm?
+
+ +
+How can you install a Perl module?
+
+ ## Mongo
diff --git a/images/perl.png b/images/perl.png new file mode 100644 index 0000000..a010406 Binary files /dev/null and b/images/perl.png differ