use strict; use warnings; use Text::CSV; use MIME::Base64; my $csv = Text::CSV->new( { binary => 1, eol => "\n" } ); while ( my $row = $csv->getline( \*DATA ) ) { for (@$row) { $_ = decode_base64($_) if m{ ^ (?: [A-Za-z0-9+/]{4} )* (?: [A-Za-z0-9+/]{2} [AEIMQUYcgkosw048] = | [A-Za-z0-9+/] [AQgw] == )? $ }x; } $csv->print( \*STDOUT, $row ); } __DATA__ 1,Just some data,c29tZSBzdHJpbmc= 2,VGhlIG5leHQgY29sdW1uIGlzIG5vdCBhY3R1YWxseSBCYXNlNjQgZW5jb2RlZA==,Oops