Here’s one way to do it:
while (<>) { chomp; $slash = rindex($_,"/"); if ($slash > -1) { $head = substr($_,0,$slash); $tail = substr($_,$slash+1); } else { ($head,$tail) = ("", $_); } print "head = '$head', tail = '$tail' "; }
Each line read by the diamond operator is first
chomp
ed (tossing the newline). Next we look for
the rightmost slash in the line, using rindex()
.
The next two lines break the string apart using
substr()
. If no slash exists, the result of the
rindex
is -1
, so we hack around
that. The final line within the loop prints the results.
Here’s one way to do it:
chomp(@nums = <STDIN>); # note special use of chomp @nums = sort { $a <=> $b } @nums; foreach (@nums) { printf "%30g ", $_; }
The first line grabs all of the numbers into the
@nums
array. The second line sorts the array
numerically, using an inline definition for a sorting order. The
foreach
loop prints the results.
Here’s one way to do it:
while (<>) { substr($_,0,1) =~ tr/a-z/A-Z/; substr($_,1) =~ tr/A-Z/a-z/; print; }
For each line read by the diamond operator, we use two
tr
operators, each on a different portion of the
string. The first tr
operator uppercases the first
character of the line, and the second tr
operator
lowercases the remainder. The result is printed.
Another way to do this, using only double-quoted string operators, is:
while (<>) { print "uL$_"; }
Give yourself an extra five points if you thought of that method instead.