in reply to using map and swap (aka substitute)

What should be done instead:

my @list= qw(first_string second_string); @list = map((s/_string$// and $_), @list); print @list;

This should be done only if one wishes to reduce all strings on which no substitution is done to empty strings:

>perl -wMstrict -le "my @list= qw(first_string second_string THIRD fourth_string); @list = map((s/_string$// and $_), @list); printf qq{'$_' } for @list; " 'first' 'second' '' 'fourth'

If this is not the case, BrowserUk has shown some alternatives.