Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

How do I assign a variable to the file content?

by NotProud (Novice)
on Sep 24, 2000 at 20:26 UTC ( #33866=perlquestion: print w/replies, xml ) Need Help??

NotProud has asked for the wisdom of the Perl Monks concerning the following question: (files)

I am trying to get a number from a text file and add one to it. Here is my code so far. Where does one go from here?
#!/usr/local/bin/perl -w use strict; print "Content-type: text/html\n\n"; $counttext = 'd:/'; $thenumber; open(COUNTTHIS, "< $counttext") or die "I can't open counttext: $!\n"; print (<COUNTTHIS>); $thenumber = <COUNTTHIS>; #I thought something like this, but no print "$thenumber"; print "<br>"; $thenumber = ++$thenumber; print "$thenumber";
Thank you!

Originally posted as a Categorized Question.

Replies are listed 'Best First'.
Re: How do I assign a variable to the file content?
by Corion (Pope) on Sep 24, 2000 at 21:45 UTC

    Update: This post contains some inaccuracies, which Tye points out in a reply below. Read both posts.

    To me, this really sounds like you want to accomplish several steps :

    1. Read $thenumber from a file.
    2. Print $thenumber
    3. Increment $thenumber
    4. Write the new value of $thenumber back to the file
    And it seems like you want to do this for a web counter CGI program.

    The solution is available in the form of the File::CounterFile module. This maintains a counter file which does the counting for you.

    If you think rolling your own version is the better solution, keep the following problems in mind :

    • Concurrency: If two users simultaneously access your counter CGI, they will see the same counter value. Hits may be lost on an overloaded machine, if one counter program runs much slower than several others.
    • Security: Your program is writing to a file on your system. This always means that you must take special care not to open up any security holes, like overwriting the wrong files.

    Update: On rereading your question, I haven't answered your actual questions. Your code

    open(COUNTTHIS, "< $counttext") or die "I can't open counttext: $!\n"; print(<COUNTTHIS>);
    opens the file with the name contained in $counttext and prints the first line of it. The next line in your code,
    $thenumber = <COUNTTHIS>; #I thought something like this, but no
    reads the second line from the file COUNTTHIS, and stores it in $thenumber. What you propably wanted to do was to read a single line from COUNTTHIS, print it, and store it in $thenumber, like this :
    print (<COUNTTHIS>); $thenumber = $_; # or, alternatively, like this : $thenumber = <COUNTTHIS>; print $thenumber;

      A couple of notes:

      print( <COUNTTHIS> );
      prints the entire contents of the open file since <> in an array context reads all remaining lines.

      print (<COUNTTHIS>); $thenumber = $_;
      The first line above doesn't set $_ like while(<COUNTTHIS>) does. So the second line doesn't leave $thenumber set properly.

      $thenumber = <COUNTTHIS>; print $thenumber;
      This version fixes all of these problems.

              - tye (but my friends call me "Tye")
Re: How do I assign a variable to the file content?
by meonkeys (Chaplain) on Sep 24, 2000 at 22:33 UTC
    Keeping in mind all of Corion's expert advice, here's a working version of your code, assuming counttext.txt exists and is accessible:
    #!/usr/local/bin/perl -w use strict print "Content-type: text/html\n\n"; my $counttext = 'd:/'; my $thenumber; open(COUNTTHIS, "< $counttext") or die "I can't open counttext: $!\n"; $thenumber = <COUNTTHIS>; close(COUNTTHIS); print "$thenumber<br>"; ++$thenumber; print "$thenumber"; open(OUT, "> $counttext") or die "I can't open counttext: $!\n"; print OUT $thenumber; close(OUT);
      Thanks alot to both of you.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://33866]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2020-10-21 07:33 GMT
Find Nodes?
    Voting Booth?
    My favourite web site is:

    Results (212 votes). Check out past polls.