Perl rindex Function
You may consider the Perl rindex function like a reverse for index function – right to left substring search. It returns the position of the last occurrence of a substring in a string, looking from right to left. In this tutorial we’ll show how to use this function in your script applications through several examples.
To find a substring in a string from right to left, you can use the regular expressions too, but using Perl rindex function is faster and easier to understand. Try to avoid using regular expressions for simple string operations especially when some built-in functions specially designed for this purpose are available. The regex have to manipulate memory variables, so keep them for more sophisticated and complex operations.
Before beginning with, you can skim a bit through Perl index page in order to better understand the topic discussed here.
Two syntax forms are available for this function:
Here, the three arguments have the following meaning:
- STR - the string you are searching
- SUBSTR - the substring whose position you want to locate or to search for
- POSITION – if specified, represents the rightmost position that can be returned, from that position the function will search from right to left looking for the substring to match
If you don’t provide the third argument, the Perl rindex
function will search for the substring beginning with the last character of the string and from right to left. It will return the position of the first occurrence of the substring if the substring was found and -1 otherwise. The parentheses are optional, it is your choice to use them or not. Still, there are cases when it is better to use them, in order to make your code more readable.
Please examine the code below to see some simple examples about how to use the Perl rindex function:
# initialize a scalar string variable
my $str = "Perl while Perl if Perl foreach";
my $substr = "Perl";
my $pos = rindex $str, $substr;
my $pos1 = rindex($str, $substr, 15);
print "\$pos = $pos, \$pos1 = $pos1\n";
# it displays pos = 19, $pos1 = 11
It works just like index
function except that it scans the string from right to left and returns the position of the last occurrence of the substring, there is no other difference in their usage.
|Check if a substring is included in a string |
We can use the return value of the Perl rindex
function to find out if a substring is included in a string, looking backward, i.e. from write to left. You can also supply a start position for our searching or let the rindex
function search from the rightmost character of the string.
If the substring is not found, rindex returns -1, otherwise it returns the last position of the occurrence of the substring.
# initialize a string scalar
my $textStr = "PDF::Create is a Perl module";
if((my $pos = rindex(lc $textStr, lc "perl")) >= 0)
print "We found it!\n";
Please note that at first we converted the string and the substring in lowercase (by using lc
function) in order to make our search case insensitive.
|Find out all the occurrences of a substring in a string |
You can search for all the occurrences of a substring in a string either by using index
function. The example below looks for the positions of the slash character in a string (you can use the same algorithm to search for a substring composed from more than one characters, though).
# initialize a string scalar
my $url = "http://www.mysite.com/perl-rindex.html";
my $pos = length($url)-1;
print "/ found at positions: ";
$pos = rindex($url, "/", $pos);
last if($pos < 0);
print $pos--, " ";
We used the last
keyword to finish the while
loop iteration. If you run this code, you’ll get the output:
/ found at positions: 29 6 5
Please click here
to download the Perl rindex
script with all the above examples included.
Table of Contents:
A Perl Script
Perl Data Types
Built-in Perl Functions
Functions by Category
Regular Expressions and Pattern Matching
Functions in alphabetical order
return from Perl rindex Function to Perl Basics
Would you like to create your own website like this one?
Hit the Alarm Clock!