I'm not sure you want the dash at the end of the shebang line...
It doesn't do any harm when invoking the code like you did, but when
I try to run your sample code/data without explicitly calling perl
(rather letting the OS handle the shebang), I'm getting
$ cat file.txt | ./664708.pl
Can't locate object method "a" via package "b" (perhaps you forgot to
+load "b"?) at - line 1.
I suppose this is because what comes in through stdin is being
interpreted as Perl code, rather than as content to be read via <> ...