Why is three-argument open calls with autovivified filehandles a Perl best practice?

后端 未结 3 748
-上瘾入骨i
-上瘾入骨i 2020-11-22 12:32

I\'ve got two questions about the Perl open function:

1) I seem to remember from Perl Best Practices that the 3-argument version of open<

3条回答
  •  执念已碎
    2020-11-22 13:01

    • Using typeglobs for filehandles (like OUT) is not a good idea, as they are global across your entire program - you need to be sure that no other routine including those in modules are using the same name (including in the future).
    • Using the two-argument form of open exposes your application to mis-behaviour caused by variables containing special characters, for example my $f; open $f, ">$some_filename"; is exposed to the bug where $some_filename containing a leading > will change the program's behaviour.

    Using the three-argument form avoids this by separating the mode and filename into separate arguments where they can't interfere.

    Moreover, using the lots-of-arguments form with pipes is a very good idea:

    open $pipe, '|-', 'sendmail', 'fred@somewhere.fake';
    

    Is better than doing it all as a single string – it avoids possible shell injection etc.

提交回复
热议问题