यह आसानी से एक फाइल संभाल के लिए एक चर बनाने के द्वारा हल किया जाता है:
sub _init_tmp_db {
my $self = shift;
my $fh;
open $fh, ">", "data.txt"
$self->{temp_db_fh} = $fh;
# Sometime later...
$fh = $self-{temp_db_hf};
print $fh "Bob\n";
}
यह एक मुद्दा है क्योंकि जिस तरह से print
वाक्यविन्यास पार्स किया गया है और वाक्यविन्यास की प्रारंभिक ढलान है। print
कथन में वास्तव में दो अलग-अलग प्रारूप हैं: प्रारूप # 1 यह है कि आप इसे मुद्रित करने के लिए सामान को पास कर रहे हैं। प्रारूप # 2 कहता है कि पहला आइटम फ़ाइल हैंडल हो सकता है, और शेष वह सामान है जिसे आप फ़ाइल हैंडल पर प्रिंट करना चाहते हैं। यदि print
आसानी से निर्धारित नहीं कर सकता कि पहला पैरामीटर फ़ाइल हैंडल है, तो यह विफल हो जाता है।
यदि आप अन्य भाषाओं को देखते हैं, तो वे फ़ाइल हैंडल पास करने के लिए पैरामीटर का उपयोग करेंगे, और शायद प्रिंट करने के लिए सामान का उपयोग करेंगे। या ऑब्जेक्ट उन्मुख भाषाओं में, वे फ़ाइल हैंडल पैरामीटर के लिए >>
अधिभारित करेंगे। वे कुछ इस तरह दिखाई देंगे:
print "This is my statement", file=file_handle;
या
print "This is my statement" >> file_handle;
आप वाक्य रचना Munge करने के लिए एक चर का उपयोग कर से दूर प्राप्त करने में सक्षम हो सकता है। हालांकि, यह प्रोग्राम को अधिक कुशल या अधिक पठनीय नहीं बनाता है, और प्रोग्राम को बनाए रखने के लिए प्रोग्राम को कठिन बना सकता है। तो, फ़ाइल हैंडल के लिए बस एक चर का उपयोग करें।
आप वर्ग अपने शीर्षक में कहा। मुझे लगता है कि आप ऐसा करने के लिए एक पूरी तरह से ऑब्जेक्ट उन्मुख पैकेज लिखने में रुचि रखते हैं। यहां एक त्वरित उदाहरण है। write
subroutine
विधि में फ़ाइल नोटिस मैं एक चर में फ़ाइल हैंडल पुनर्प्राप्त करता हूं और print
कथन में चर का उपयोग करता हूं।
#! /usr/bin/env perl
#
use strict;
use warnings;
#######################################################
# MAIN PROGRAM
#
my $file = File->new;
$file->open("OUTPUT") or
die "Can't open 'OUTPUT' for writing\n";
$file->write("This is a test");
#
#######################################################
package File;
use Carp;
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
sub open {
my $self = shift;
my $file = shift;
my $fh;
if (defined $file) {
$self->{FILE} = $file;
open ($fh, ">", $file) and $self->_fh($fh);
}
return $self->_fh;
}
sub _fh {
my $self = shift;
my $fh = shift;
if (defined $fh) {
$self->{FH} = $fh;
}
return $self->{FH};
}
sub write {
my $self = shift;
my $note = shift;
my $fh = $self->_fh;
print $fh $note . "\n";
return
}
स्रोत
2012-01-30 15:48:11
यह 'सख्त' रेफ 'का उपयोग नहीं करेगा; ' – dgw
मैंने कई स्थानों की खोज की लेकिन कभी भी वह पृष्ठ नहीं मिला। बहुत धन्यवाद। सुझाव के लिए –