in reply to Re^2: removing the need for tmp files from script
in thread removing the need for tmp files from script

Hi novice2015

The link to open that BillKSmith mentioned in his post has the following text.

# in-memory files 21. open(my $memory, ">", \$var) 22. or die "Can't open memory file: $!"; 23. print $memory "foo!\n"; # output will appear in $var
This shows how to write to an in-memory file.

To read from an in memory file, you would do this:

#!/usr/bin/perl use strict; use warnings; my $file = 'here are some words I want '; open my $fh, '<', \$file; chomp(my @words = <$fh>); my $pattern = join "|", @words; print $pattern;
That would be a way to not need the tmp. file.

Replies are listed 'Best First'.
Re^4: removing the need for tmp files from script
by novice2015 (Acolyte) on Jul 29, 2016 at 21:15 UTC
    this works great. However, I have one issue in that the file has 2 lines in it and only the first line gets printed.
    my $pattern = join '|', @words; my $forx; open my $bpfh1, '>', \$forx or die $!; for (@bpj) { print $bpfh1 "$_\n", $_ if /$pattern/; } open my $bpfh1, '<', \$forx or die $!; while (<$bpfh1>) { my @fields = split(',', $_); my $fields; local $" = ','; if ($fields[2] eq '1' ||$fields[2] eq '0') { print "THESE ARE THE>>$fields[4]\n" if /MONTHLY/ && !/,-, +/; } close $bpfh1; } close $bpfh1; }
    So what I get is LISTING-INVENTORY-CATALOG LISTING-PURCHASING-CATALOG The variable (memory file) $forx does contain data, and it prints out just fine. But only the first line. I have tried different things to make the second line print, such as closing the file earlier, but it doesn't work. I've had this problem before but can't remember how I got it resolved. Any ideas?