in reply to Re^2: Open Function Question
in thread Open Function Question

If $i is some string, like: $i = 'abc/def', then,
open (my $myfile, "$i") or die... open (my $myfile, "<$i")or die... #no space after < open (my $myfile, '<', "$i") or die... take your pick...
open (my $myfile, '<', \$i) or die...

UPDATE:

open (my $myfile, "$i") or die... open (my $myfile, $i) or die... open (my $myfile, "<$i")or die... #no space after < required open (my $myfile, "< $i")or die... open (my $myfile, '<', "$i") or die... open (my $myfile, '<', $i) or die... \$i is wrong above....

Replies are listed 'Best First'.
Re^4: Open Function Question
by johngg (Canon) on Apr 18, 2009 at 12:25 UTC

    If $i is some string, like: $i = 'abc/def', then,

    open (my $myfile, "$i") or die... open (my $myfile, "<$i")or die... #no space after < open (my $myfile, '<', "$i") or die... open (my $myfile, '<', \$i) or die... take your pick...

    A few points:-

    • The double-quotes around $i are un-necessary in your first line of code.
    • A space after the '<' is allowable in your second example.
    • Your fourth example is going to do something quite different to the other three.

    Given this file ...

    $ cat abc/abc.txt line 1 line 2 $

    ... and this script ...

    use strict; use warnings; my $fn = q{abc/abc.txt}; print qq{\nTest 1:\n}; print do{ open my $fh, $fn or die qq{open: Test 1: \n}; <$fh>; }; print qq{\nTest 2:\n}; print do{ open my $fh, qq{<$fn} or die qq{open: Test 2: \n}; <$fh>; }; print qq{\nTest 3:\n}; print do{ open my $fh, qq{< $fn} or die qq{open: Test 3: \n}; <$fh>; }; print qq{\nTest 4:\n}; print do{ open my $fh, q{<}, $fn or die qq{open: Test 4: \n}; <$fh>; }; print qq{\nTest 5:\n}; print do{ open my $fh, q{<}, \$fn or die qq{open: Test 5: \n}; <$fh>; }; print qq{\n};

    ... the following output is produced.

    Test 1: line 1 line 2 Test 2: line 1 line 2 Test 3: line 1 line 2 Test 4: line 1 line 2 Test 5: abc/abc.txt

    Note that "Test 2" and "Test 3" work in exactly the same way. Note also that in "Test 5", which is analogous to your fourth code line, the filehandle actually reads the text contained in the scalar, as demonstrated in BrowserUk's response, rather than the file contents.

    I hope this is of interest.

    Cheers,

    JohnGG

      The double-quotes around $i are un-necessary in your first line of code.
      Correct. Just like you can do a print $i vs print "$i".
      This doesn't hurt and I think it makes it more clear that this is a string. I figure this is a minor quibble.

      A space after the '<' is allowable in your second example
      Correct. just saying that it is not *required*
      I've never used the 4th form in production code, my mistake copying without verifying from another post. I personally have never used it. Ooops.
      Thanks for the clarifications!