The first time you read about the chomp operator, it seems terribly overspecialized. It works on a variable. The variable has to hold a string. And if the string ends in a newline character, chomp can get rid of the newline. That's (nearly) all it does. For example:
$text = "a line of text\n"; # Or the same thing from <STDIN> chomp($text); # Gets rid of the newline character But it turns out to be so useful, you'll put it into nearly every program you write. As you see, it's the best way to remove a trailing newline from a string in a variable. In fact, there's an easier way to use chomp , because of a simple rule: any time that you need a variable in Perl, you can use an assignment instead. First, Perl does the assignment. Then it uses the variable in whatever way you
chomp($text = <STDIN>); # Read the text, without the newline character $text = <STDIN>; # Do the same thing... chomp($text); # ...but in two steps At first glance, the combined chomp may not seem to be the easy way,
chomp is actually a function. As a function, it has a return value, which is the number of
$food = <STDIN>; $betty = chomp $food; # gets the value 1 - but we knew that! As you see, you may write chomp with or without the parentheses. This is another general rule in Perl: except in cases where it changes the meaning to remove them, parentheses are always optional.
If a line ends with two or more newlines, [27] chomp
[27] This situation can't arise if we're reading a line at a time, but it
If you work with older Perl programs, you may run across the chop operator. It's similar, but removes any trailing character, not just a trailing newline. Since that could
Like most algorithmic programming languages, Perl has a number of looping structures. [28] The while loop repeats a block of code as long as a condition is true:
[28] Every programmer eventually creates an infinite loop by
$count = 0; while ($count < 10) { $count += 1; print "count is now $count\n"; # Gives values from 1 to 10 } As always in Perl, the truth value here works like the truth value in the if test. Also like the if control structure, the block curly braces are required. The conditional expression is evaluated before the first iteration, so the loop may be