Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / IO::AtomicFile.3pm
1 .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.3
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sh \" Subsection heading
6 .br
7 .if t .Sp
8 .ne 5
9 .PP
10 \fB\\$1\fR
11 .PP
12 ..
13 .de Sp \" Vertical space (when we can't use .PP)
14 .if t .sp .5v
15 .if n .sp
16 ..
17 .de Vb \" Begin verbatim text
18 .ft CW
19 .nf
20 .ne \\$1
21 ..
22 .de Ve \" End verbatim text
23 .ft R
24 .fi
25 ..
26 .\" Set up some character translations and predefined strings.  \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote.  | will give a
29 .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
30 .\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
31 .\" expand to `' in nroff, nothing in troff, for use with C<>.
32 .tr \(*W-|\(bv\*(Tr
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34 .ie n \{\
35 .    ds -- \(*W-
36 .    ds PI pi
37 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
39 .    ds L" ""
40 .    ds R" ""
41 .    ds C` ""
42 .    ds C' ""
43 'br\}
44 .el\{\
45 .    ds -- \|\(em\|
46 .    ds PI \(*p
47 .    ds L" ``
48 .    ds R" ''
49 'br\}
50 .\"
51 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53 .\" entries marked with X<> in POD.  Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
55 .if \nF \{\
56 .    de IX
57 .    tm Index:\\$1\t\\n%\t"\\$2"
58 ..
59 .    nr % 0
60 .    rr F
61 .\}
62 .\"
63 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
64 .\" way too many mistakes in technical documents.
65 .hy 0
66 .if n .na
67 .\"
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
70 .    \" fudge factors for nroff and troff
71 .if n \{\
72 .    ds #H 0
73 .    ds #V .8m
74 .    ds #F .3m
75 .    ds #[ \f1
76 .    ds #] \fP
77 .\}
78 .if t \{\
79 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80 .    ds #V .6m
81 .    ds #F 0
82 .    ds #[ \&
83 .    ds #] \&
84 .\}
85 .    \" simple accents for nroff and troff
86 .if n \{\
87 .    ds ' \&
88 .    ds ` \&
89 .    ds ^ \&
90 .    ds , \&
91 .    ds ~ ~
92 .    ds /
93 .\}
94 .if t \{\
95 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101 .\}
102 .    \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 .    \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 .    \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
117 \{\
118 .    ds : e
119 .    ds 8 ss
120 .    ds o a
121 .    ds d- d\h'-1'\(ga
122 .    ds D- D\h'-1'\(hy
123 .    ds th \o'bp'
124 .    ds Th \o'LP'
125 .    ds ae ae
126 .    ds Ae AE
127 .\}
128 .rm #[ #] #H #V #F C
129 .\" ========================================================================
130 .\"
131 .IX Title "IO::AtomicFile 3"
132 .TH IO::AtomicFile 3 "2005-02-10" "perl v5.8.7" "User Contributed Perl Documentation"
133 .SH "NAME"
134 IO::AtomicFile \- write a file which is updated atomically
135 .SH "SYNOPSIS"
136 .IX Header "SYNOPSIS"
137 .Vb 1
138 \&    use IO::AtomicFile;
139 .Ve
140 .PP
141 .Vb 4
142 \&    ### Write a temp file, and have it install itself when closed:
143 \&    my $FH = IO::AtomicFile\->open("bar.dat", "w");
144 \&    print $FH "Hello!\en";
145 \&    $FH\->close || die "couldn't install atomic file: $!";
146 .Ve
147 .PP
148 .Vb 4
149 \&    ### Write a temp file, but delete it before it gets installed:
150 \&    my $FH = IO::AtomicFile\->open("bar.dat", "w");
151 \&    print $FH "Hello!\en";
152 \&    $FH\->delete;
153 .Ve
154 .PP
155 .Vb 4
156 \&    ### Write a temp file, but neither install it nor delete it:
157 \&    my $FH = IO::AtomicFile\->open("bar.dat", "w");
158 \&    print $FH "Hello!\en";
159 \&    $FH\->detach;
160 .Ve
161 .SH "DESCRIPTION"
162 .IX Header "DESCRIPTION"
163 This module is intended for people who need to update files 
164 reliably in the face of unexpected program termination.  
165 .PP
166 For example, you generally don't want to be halfway in the middle of
167 writing \fI/etc/passwd\fR and have your program terminate!  Even
168 the act of writing a single scalar to a filehandle is \fInot\fR atomic.
169 .PP
170 But this module gives you true atomic updates, via \fIrename()\fR.
171 When you open a file \fI/foo/bar.dat\fR via this module, you are \fIactually\fR 
172 opening a temporary file \fI/foo/bar.dat..TMP\fR, and writing your
173 output there.   The act of closing this file (either explicitly
174 via \fIclose()\fR, or implicitly via the destruction of the object)
175 will cause \fIrename()\fR to be called... therefore, from the point
176 of view of the outside world, the file's contents are updated
177 in a single time quantum.
178 .PP
179 To ensure that problems do not go undetected, the \*(L"close\*(R" method
180 done by the destructor will raise a fatal exception if the \fIrename()\fR
181 fails.  The explicit \fIclose()\fR just returns undef.   
182 .PP
183 You can also decide at any point to trash the file you've been 
184 building. 
185 .SH "AUTHOR"
186 .IX Header "AUTHOR"
187 .Sh "Primary Maintainer"
188 .IX Subsection "Primary Maintainer"
189 David F. Skoll (\fIdfs@roaringpenguin.com\fR).
190 .Sh "Original Author"
191 .IX Subsection "Original Author"
192 Eryq (\fIeryq@zeegee.com\fR).
193 President, ZeeGee Software Inc (\fIhttp://www.zeegee.com\fR).
194 .SH "REVISION"
195 .IX Header "REVISION"
196 $Revision: 1.2 $