in reply to Source Filter basics

given doesn't alias $_ like a foreach loop does, it copies into a lexical $_. You didn't change the package var $_ as you should have.
>perl -E"$_='abc'; say; given ($_) { s/abc/def/; say; } say;" abc def abc

Switch given for for.

>perl -E"$_='abc'; say; for ($_) { s/abc/def/; say; } say;" abc def def

Note that if you simply want to provide say to older version of Perl, you can get something very similar from Perl6::Say.