String Functions

chop
chop(LIST)
chop(VARIABLE)
chop VARIABLE
chop
Chops off the last character of a string and returns the character chopped. It's used primarily to remove the newline from the end of an input record, but is much more efficient than s/\n// because it neither scans nor copies the string. If VARIABLE is omitted, chops $_. Example:
	while (<>) {
		chop;	# avoid \n on last field
		@array = split(/:/);
		...
	}
You can actually chop anything that's an lvalue, including an assignment:
	chop($cwd = \`pwd\`);
	chop($answer = <STDIN>);
If you chop a list, each element is chopped. Only the value of the last chop is returned.

crypt(PLAINTEXT,SALT)
Encrypts a string exactly like the crypt() function in the C library. Useful for checking the password file for lousy passwords. Only the guys wearing white hats should do this.

eval(EXPR)
eval EXPR
eval BLOCK
EXPR is parsed and executed as if it were a little perl program. It is executed in the context of the current perl program, so that any variable settings, subroutine or format definitions remain afterwards. The value returned is the value of the last expression evaluated, just as with subroutines. If there is a syntax error or runtime error, or a die statement is executed, an undefined value is returned by eval, and $@ is set to the error message. If there was no error, $@ is guaranteed to be a null string. If EXPR is omitted, evaluates $_. The final semicolon, if any, may be omitted from the expression.

Note that, since eval traps otherwise-fatal errors, it is useful for determining whether a particular feature (such as dbmopen or symlink) is implemented. It is also Perl's exception trapping mechanism, where the die operator is used to raise exceptions.

If the code to be executed doesn't vary, you may use the eval-BLOCK form to trap run-time errors without incurring the penalty of recompiling each time. The error, if any, is still returned in $@. Evaluating a single-quoted string (as EXPR) has the same effect, except that the eval-EXPR form reports syntax errors at run time via $@, whereas the eval-BLOCK form reports syntax errors at compile time. The eval-EXPR form is optimized to eval-BLOCK the first time it succeeds. (Since the replacement side of a substitution is considered a single-quoted string when you use the e modifier, the same optimization occurs there.) Examples:

	# make divide-by-zero non-fatal
	eval { $answer = $a / $b; }; warn $@ if $@;

	# optimized to same thing after first use
	eval '$answer = $a / $b'; warn $@ if $@;

	# a compile-time error
	eval { $answer = };

	# a run-time error
	eval '$answer =';	# sets $@

index(STR,SUBSTR,POSITION)
index(STR,SUBSTR)
Returns the position of the first occurrence of SUBSTR in STR at or after POSITION. If POSITION is omitted, starts searching from the beginning of the string. The return value is based at 0, or whatever you've set the $[ variable to. If the substring is not found, returns one less than the base, ordinarily -1.

length(EXPR)
length EXPR
Returns the length in characters of the value of EXPR. If EXPR is omitted, returns length of $_.

q/STRING/
qq/STRING/
qx/STRING/
These are not really functions, but simply syntactic sugar to let you avoid putting too many backslashes into quoted strings. The q operator is a generalized single quote, and the qq operator a generalized double quote. The qx operator is a generalized backquote. Any non-alphanumeric delimiter can be used in place of /, including newline. If the delimiter is an opening bracket or parenthesis, the final delimiter will be the corresponding closing bracket or parenthesis. (Embedded occurrences of the closing bracket need to be backslashed as usual.) Examples:
	$foo = q!I said, "You said, 'She said it.'"!;
	$bar = q('This is it.');
	$today = qx{ date };
	$_ .= qq
*** The previous line contains the naughty word "$&".\n
		if /(ibm|apple|awk)/;      # :-)

rindex(STR,SUBSTR,POSITION)
rindex(STR,SUBSTR)
Works just like index except that it returns the position of the LAST occurrence of SUBSTR in STR. If POSITION is specified, returns the last occurrence at or before that position.

substr(EXPR,OFFSET,LEN)
substr(EXPR,OFFSET)
Extracts a substring out of EXPR and returns it. First character is at offset 0, or whatever you've set $[ to. If OFFSET is negative, starts that far from the end of the string. If LEN is omitted, returns everything to the end of the string. You can use the substr() function as an lvalue, in which case EXPR must be an lvalue. If you assign something shorter than LEN, the string will shrink, and if you assign something longer than LEN, the string will grow to accommodate it. To keep the string the same length you may need to pad or chop your value using sprintf().