Re: Deleting from front of string
by Moonie (Friar) on Oct 05, 2001 at 02:23 UTC
|
| [reply] |
Re: Deleting from front of string
by demerphq (Chancellor) on Oct 05, 2001 at 06:21 UTC
|
Frankly im amazed no one else posted this reply
my $str='Blah blah blah';
my $removed=substr($str,0,2,"");
print "Removed=$removed and Str=$str\n";
Substr with 4 arguments sets the substr in question to equal the value of the 4th argument. In this case delete it.
Yves
--
You are not ready to use symrefs unless you already know why they are bad. -- tadmc (CLPM) | [reply] [d/l] |
|
perl -le '$_ = "foo bar"; substr($_,0,2) = ""; print'
| [reply] [d/l] |
Re: Deleting from front of string
by gryphon (Abbot) on Oct 05, 2001 at 02:31 UTC
|
Greetings krose,
Try the following where 2 is the number of characters you want removed from the 'some string' given:
print substr('some string', 2);
-gryphon
code('Perl') || die;
| [reply] [d/l] |
Re: Deleting from front of string
by tachyon (Chancellor) on Oct 05, 2001 at 02:49 UTC
|
$_ = "just another perl hacker";
$_ = reverse, chop, chop && print scalar reverse;
cheers
tachyon
s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print
| [reply] [d/l] |
|
Ah, but what if you had some "evil" string such as:
$_ = '10.) just another perl hacker';
-Blake
| [reply] [d/l] |
|
my $i;
print join '', grep $i++>1, split //, '#!just another perl hacker';
| [reply] [d/l] |
|
$_ = '10.) just another perl hacker';
$_ = reverse,chop,chop,print scalar reverse;
Perl a problem for every solution solution for every problem
cheers
tachyon
s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print
| [reply] [d/l] |
(Daddio) Re: Deleting from front of string
by Daddio (Chaplain) on Oct 05, 2001 at 04:10 UTC
|
Other than substr, there is always the regex method:
$_ = "just another perl hacker";
s/^.{2}(.*)$/$1/;
print;
D
a
d
d
i
o
| [reply] [d/l] [select] |
|
What happens with this string?
$_=qq!\nJ\nu\ns\t another Perl hacker!;
Your regexp fails, because \n is not matched by /./
Nobody have said that the two first characters matches with /./
Try this
s/(\w|\W){2}//;
Regards
Hopes | [reply] [d/l] [select] |
|
Very well spotted, Hopes. Dot not matching a newline is such a common mistake it's easy to forget. I'm glad that you noticed it.
<pedant>
Actually, it's possible to get dot to match everything by using the /s switch. This also has the benefit that ^ and $ will match the beginning and end of the string, and not at line breaks, which for our purposes here is desirable. See the perlre man page for details.
Hence $string =~ s/^..//s does what we want, even if we are dealing with newlines. If you don't mind losing clarity, you can even drop the ^ in this situation.
</pedant>
Having said all that, the substr method described above would be my recommendation. (It's also likely to be the fastest). ;)
Cheers,
Paul
| [reply] |
|
|
s/^.{2}//s;
The s modifier at the end takes care of \n chars as well.
But substr() is the best way anyway... :)
.02
cLive ;-) | [reply] [d/l] |
Re: Deleting from front of string
by ambrus (Abbot) on Apr 11, 2006 at 14:29 UTC
|
Here is a list of threads on choping the first character of strings; thanks to Limbic~Region for finding them.
| [reply] |