I am failing to get this working for a day now. Looked at URL : https://stackoverflow.com/questions/6845376/how-to-pass-a-file-handle-to-a-function but no go. I am passing an array of paths+files like so "/opt/r2configs/.../lparstat-i.out" as a reference into a sub. When I try to open these, it fails.
use strict; use warnings; my %seen = (); my $flag = 0; my (@nonprod_lpars, @lparstat, $clntdir); my $regexp_2_skip = qr/entitled capacity of pool/i; my $regexp_2_get = qr/entitled capacity|desired Virtual CPU|desired M +emory|online Virtual CPU|maximum Virtual CPU|maximum memory|online me +mory/i; my $datacsv = qq($basedir/nonprod_resource_stats_4_mgmt.csv); open (my $csv, ">>$datacsv") or die "failed to open $datacsv $!\n"; sub _ce { print "IN CE SUB\n"; die "no parameter!\n" unless @_; my ($ce_ref) = @_; for my $name (@{ $ce_ref }) { @asof = +(split("/", $name, 0))[-3,-2,-4]; $lpname = +(split("/", $name, 0))[3]; print $csv "$lpname\n"; print $csv '*' x length($lpname),"\n"; print '*' x length($lpname),"\n"; print "$name\n"; open (my $i, "+<", $name) or warn $!; ### FAILS HERE ### while (<$i>) { chomp $i; next if $i =~ /$regexp_2_skip/; next if $i !~ /$regexp_2_get/; ($i) =~ s/:/,/g; ($i) =~ s/\s+//g; print $csv "$i,\n"; print "$i,\n"; } } print $csv "\n\nHost,Entitled CPU and RAM as of @asof,\n\n"; return; } ... ... print "heading into lparstat find $clntdir count of nonprodlpars", sca +lar @nonprod_lpars; for my $npll (@nonprod_lpars) { next if $npll =~ /null/i; print "\nnpll: $npll"; push @lparstat, qx(/usr/bin/find "$clntdir/$npll" -name $lparstout + -mtime 1); print " lparstat count:", scalar @lparstat; } if ( scalar @nonprod_lpars == scalar @lparstat ) { $flag = 1; print "\nFLAG:$flag\n"; _ce( \@lparstat ); } else { print "at top of mtime 2 block\n"; print "SCALAR NPLPARS ",scalar @nonprod_lpars; for my $npll (@nonprod_lpars) { next if $npll =~ /null/i; push @lparstat, qx(/usr/bin/find "$clntdir/$npll" -name $lpars +tout -mtime 2); } print "SCALAR lparstat: ", scalar @lparstat; if ( scalar @nonprod_lpars == scalar @lparstat ) { $flag = 2; _ce( \@lparstat ); } . . . __OUT__ $name is clearly getting passed ok from my prints: No such file or directory at get_nonprod_AIX_resrcs_used.plx line 456. readline() on closed filehandle $i at get_nonprod_AIX_resrcs_used.plx +line 457. ************ /opt/r2configs/twcsapcont01/2018/03/13/lparstat-i.out and a confirmation it does exist is here # ls -l /opt/r2configs/twcsapcont01/2018/03/13/lparstat-i.out -rw-r--r-- 1 root system 2225 Mar 13 21:16 /opt/r2confi +gs/twcsapcont01/2018/03/13/lparstat-i.out
thank you!

In reply to opening a file passed into sub as ref by teamassociated

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.