Well, it does. The thing to remember is that local() provides an array context, and that the <FILE> syntax in an array context will read all the lines in a file. To work around this, use: local($foo); $foo = <FILE>; You can use the scalar() operator to cast the expression into a scalar context: local($foo) = scalar(<FILE>);