Set - 3

Question 6 :

How do you match one letter in the current locale?

Answer :

/[^\W_\d]/

We don't have full POSIX regexps, so you can't get at the isalpha() <ctype.h> macro save indirectly. You ask for one byte which is neither a non-alphanumunder, nor an under, nor a numeric. That leaves just the alphas, which is what you want.


Question 7 :

How do I print the entire contents of an array with Perl?

Answer :

To answer this question, we first need a sample array. Let's assume that you have an array that contains the name of baseball teams, like this:

@teams = ('cubs', 'reds', 'yankees', 'dodgers');

If you just want to print the array with the array members separated by blank spaces, you can just print the array like this:

@teams = ('cubs', 'reds', 'yankees', 'dodgers');
print "@teams\n";

But that's not usually the case. More often, you want each element printed on a separate line. To achieve this, you can use this code:

@teams = ('cubs', 'reds', 'yankees', 'dodgers');
foreach (@teams) {
	print "$_\n";
}

 


Question 8 :

Perl uses single or double quotes to surround a zero or more characters. Are the single(' ') or double quotes (" ") identical?

Answer :

They are not identical. There are several differences between using single quotes and double quotes for strings.
1. The double-quoted string will perform variable interpolation on its contents. That is, any variable references inside the quotes will be replaced by the actual values.
2. The single-quoted string will print just like it is. It doesn't care the dollar signs. 
3. The double-quoted string can contain the escape characters like newline, tab, carraige return, etc.
4. The single-quoted string can contain the escape sequences, like single quote, backward slash, etc.


Question 9 :

How many ways can we express string in Perl?

Answer :

Many. For example 'this is a string' can be expressed in: 
"this is a string" 
qq/this is a string like double-quoted string/
qq^this is a string like double-quoted string^
q/this is a string/
q&this is a string&
q(this is a string)


Question 10 :

How do you give functions private variables that retain their values between calls?

Answer :

Create a scope surrounding that sub that contains lexicals.
Only lexical variables are truly private, and they will persist even when their block exits if something still cares about them. Thus:

{ my $i = 0; sub next_i { $i++ } sub last_i { --$i } }

creates two functions that share a private variable. The $i variable will not be deallocated when its block goes away because next_i and last_i need to be able to access it.