itsmetom has asked for the wisdom of the Perl Monks concerning the following question:
Hi,
I have this below issue in Perl.
I have a file in which I get list of emails as input.
I would like to parse the string before '@' of all email addresses.
(Later I will store all the string before @ in an array)
For eg. in : abcdefgh@gmail.com, i would like to parse the email
address and extract abcdefgh.
My intention is to get only the string before '@'.
Now the question is how to check it using regular expression. Or is
there any other method using substr?
while I use regular expression : $mail =~ "\@" in Perl, it's not
giving me the result.
Also, how will I find that the character '@' is in which index of the
string $mail?
I appreciate if anyone can help me out.
#! usr/bin/perl
$mail = "abcdefgh@gmail.com";
if ($mail =~ "\@" ) {
print("my name = You got it!");
}
else
{
print("my name = Try again!");
}
even $mail =~ "\@" will not work.
$mail =~ "@" will work only if the given string $mail = "abcdefgh\@gmail.com";
But in my case, i will be getting the input with email address as its.
Not with an escape character.
Thanks,
Tom
Comment on RegEx to find the index of the character '@' in an Email address
Sure, but if you use double quoted strings, you forego the convenience of Perl knowing that you mean to write a single backslash when you want a backslash to appear in the regular expression.
...will work only if the given string $mail = "abcdefgh\@gmail.com"; But in my case, i will be getting the input with email address as its. Not with an escape character.
The backslash is only needed to prevent the interpolation of an array @gmail in the double quoted string literal. The actual value in $mail won't hold the backslash, just as the input values you're expecting to handle...
There are more than one way to do it, not necessarily regex
For example:
my $str = 'MY Name@gmail.com';
my $name = substr $str, 0, index($str,'@');
# OR
my ($name) = split '@', $str;
# OR
my ($name) = $str=~m/(.*?)\@/;
print $name;