Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / Archive::Extract.3pm
1 .\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.10)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 'br\}
42 .\"
43 .\" Escape single quotes in literal strings from groff's Unicode transform.
44 .ie \n(.g .ds Aq \(aq
45 .el       .ds Aq '
46 .\"
47 .\" If the F register is turned on, we'll generate index entries on stderr for
48 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
49 .\" entries marked with X<> in POD.  Of course, you'll have to process the
50 .\" output yourself in some meaningful fashion.
51 .ie \nF \{\
52 .    de IX
53 .    tm Index:\\$1\t\\n%\t"\\$2"
54 ..
55 .    nr % 0
56 .    rr F
57 .\}
58 .el \{\
59 .    de IX
60 ..
61 .\}
62 .\"
63 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
64 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
65 .    \" fudge factors for nroff and troff
66 .if n \{\
67 .    ds #H 0
68 .    ds #V .8m
69 .    ds #F .3m
70 .    ds #[ \f1
71 .    ds #] \fP
72 .\}
73 .if t \{\
74 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
75 .    ds #V .6m
76 .    ds #F 0
77 .    ds #[ \&
78 .    ds #] \&
79 .\}
80 .    \" simple accents for nroff and troff
81 .if n \{\
82 .    ds ' \&
83 .    ds ` \&
84 .    ds ^ \&
85 .    ds , \&
86 .    ds ~ ~
87 .    ds /
88 .\}
89 .if t \{\
90 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
91 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
92 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
93 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
94 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
95 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
96 .\}
97 .    \" troff and (daisy-wheel) nroff accents
98 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
99 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
100 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
101 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
102 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
103 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
104 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
105 .ds ae a\h'-(\w'a'u*4/10)'e
106 .ds Ae A\h'-(\w'A'u*4/10)'E
107 .    \" corrections for vroff
108 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
109 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
110 .    \" for low resolution devices (crt and lpr)
111 .if \n(.H>23 .if \n(.V>19 \
112 \{\
113 .    ds : e
114 .    ds 8 ss
115 .    ds o a
116 .    ds d- d\h'-1'\(ga
117 .    ds D- D\h'-1'\(hy
118 .    ds th \o'bp'
119 .    ds Th \o'LP'
120 .    ds ae ae
121 .    ds Ae AE
122 .\}
123 .rm #[ #] #H #V #F C
124 .\" ========================================================================
125 .\"
126 .IX Title "Archive::Extract 3"
127 .TH Archive::Extract 3 "2009-11-24" "perl v5.8.7" "User Contributed Perl Documentation"
128 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
129 .\" way too many mistakes in technical documents.
130 .if n .ad l
131 .nh
132 .SH "NAME"
133 Archive::Extract \- A generic archive extracting mechanism
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 .Vb 1
137 \&    use Archive::Extract;
138 \&
139 \&    ### build an Archive::Extract object ###
140 \&    my $ae = Archive::Extract\->new( archive => \*(Aqfoo.tgz\*(Aq );
141 \&
142 \&    ### extract to cwd() ###
143 \&    my $ok = $ae\->extract;
144 \&
145 \&    ### extract to /tmp ###
146 \&    my $ok = $ae\->extract( to => \*(Aq/tmp\*(Aq );
147 \&
148 \&    ### what if something went wrong?
149 \&    my $ok = $ae\->extract or die $ae\->error;
150 \&
151 \&    ### files from the archive ###
152 \&    my $files   = $ae\->files;
153 \&
154 \&    ### dir that was extracted to ###
155 \&    my $outdir  = $ae\->extract_path;
156 \&
157 \&
158 \&    ### quick check methods ###
159 \&    $ae\->is_tar     # is it a .tar file?
160 \&    $ae\->is_tgz     # is it a .tar.gz or .tgz file?
161 \&    $ae\->is_gz;     # is it a .gz file?
162 \&    $ae\->is_zip;    # is it a .zip file?
163 \&    $ae\->is_bz2;    # is it a .bz2 file?
164 \&    $ae\->is_tbz;    # is it a .tar.bz2 or .tbz file?
165 \&    $ae\->is_lzma;   # is it a .lzma file?
166 \&
167 \&    ### absolute path to the archive you provided ###
168 \&    $ae\->archive;
169 \&
170 \&    ### commandline tools, if found ###
171 \&    $ae\->bin_tar     # path to /bin/tar, if found
172 \&    $ae\->bin_gzip    # path to /bin/gzip, if found
173 \&    $ae\->bin_unzip   # path to /bin/unzip, if found
174 \&    $ae\->bin_bunzip2 # path to /bin/bunzip2 if found
175 \&    $ae\->bin_unlzma  # path to /bin/unlzma if found
176 .Ve
177 .SH "DESCRIPTION"
178 .IX Header "DESCRIPTION"
179 Archive::Extract is a generic archive extraction mechanism.
180 .PP
181 It allows you to extract any archive file of the type .tar, .tar.gz,
182 \&.gz, .Z, tar.bz2, .tbz, .bz2, .zip or .lzma without having to worry how it 
183 does so, or use different interfaces for each type by using either 
184 perl modules, or commandline tools on your system.
185 .PP
186 See the \f(CW\*(C`HOW IT WORKS\*(C'\fR section further down for details.
187 .SH "METHODS"
188 .IX Header "METHODS"
189 .ie n .SS "$ae = Archive::Extract\->new(archive => '/path/to/archive',[type => \s-1TYPE\s0])"
190 .el .SS "\f(CW$ae\fP = Archive::Extract\->new(archive => '/path/to/archive',[type => \s-1TYPE\s0])"
191 .IX Subsection "$ae = Archive::Extract->new(archive => '/path/to/archive',[type => TYPE])"
192 Creates a new \f(CW\*(C`Archive::Extract\*(C'\fR object based on the archive file you
193 passed it. Automatically determines the type of archive based on the
194 extension, but you can override that by explicitly providing the
195 \&\f(CW\*(C`type\*(C'\fR argument.
196 .PP
197 Valid values for \f(CW\*(C`type\*(C'\fR are:
198 .IP "tar" 4
199 .IX Item "tar"
200 Standard tar files, as produced by, for example, \f(CW\*(C`/bin/tar\*(C'\fR.
201 Corresponds to a \f(CW\*(C`.tar\*(C'\fR suffix.
202 .IP "tgz" 4
203 .IX Item "tgz"
204 Gzip compressed tar files, as produced by, for example \f(CW\*(C`/bin/tar \-z\*(C'\fR.
205 Corresponds to a \f(CW\*(C`.tgz\*(C'\fR or \f(CW\*(C`.tar.gz\*(C'\fR suffix.
206 .IP "gz" 4
207 .IX Item "gz"
208 Gzip compressed file, as produced by, for example \f(CW\*(C`/bin/gzip\*(C'\fR.
209 Corresponds to a \f(CW\*(C`.gz\*(C'\fR suffix.
210 .IP "Z" 4
211 .IX Item "Z"
212 Lempel-Ziv compressed file, as produced by, for example \f(CW\*(C`/bin/compress\*(C'\fR.
213 Corresponds to a \f(CW\*(C`.Z\*(C'\fR suffix.
214 .IP "zip" 4
215 .IX Item "zip"
216 Zip compressed file, as produced by, for example \f(CW\*(C`/bin/zip\*(C'\fR.
217 Corresponds to a \f(CW\*(C`.zip\*(C'\fR, \f(CW\*(C`.jar\*(C'\fR or \f(CW\*(C`.par\*(C'\fR suffix.
218 .IP "bz2" 4
219 .IX Item "bz2"
220 Bzip2 compressed file, as produced by, for example, \f(CW\*(C`/bin/bzip2\*(C'\fR.
221 Corresponds to a \f(CW\*(C`.bz2\*(C'\fR suffix.
222 .IP "tbz" 4
223 .IX Item "tbz"
224 Bzip2 compressed tar file, as produced by, for exmample \f(CW\*(C`/bin/tar \-j\*(C'\fR.
225 Corresponds to a \f(CW\*(C`.tbz\*(C'\fR or \f(CW\*(C`.tar.bz2\*(C'\fR suffix.
226 .IP "lzma" 4
227 .IX Item "lzma"
228 Lzma compressed file, as produced by \f(CW\*(C`/bin/lzma\*(C'\fR.
229 Corresponds to a \f(CW\*(C`.lzma\*(C'\fR suffix.
230 .PP
231 Returns a \f(CW\*(C`Archive::Extract\*(C'\fR object on success, or false on failure.
232 .ie n .SS "$ae\->extract( [to => '/output/path'] )"
233 .el .SS "\f(CW$ae\fP\->extract( [to => '/output/path'] )"
234 .IX Subsection "$ae->extract( [to => '/output/path'] )"
235 Extracts the archive represented by the \f(CW\*(C`Archive::Extract\*(C'\fR object to
236 the path of your choice as specified by the \f(CW\*(C`to\*(C'\fR argument. Defaults to
237 \&\f(CW\*(C`cwd()\*(C'\fR.
238 .PP
239 Since \f(CW\*(C`.gz\*(C'\fR files never hold a directory, but only a single file; if 
240 the \f(CW\*(C`to\*(C'\fR argument is an existing directory, the file is extracted 
241 there, with its \f(CW\*(C`.gz\*(C'\fR suffix stripped. 
242 If the \f(CW\*(C`to\*(C'\fR argument is not an existing directory, the \f(CW\*(C`to\*(C'\fR argument 
243 is understood to be a filename, if the archive type is \f(CW\*(C`gz\*(C'\fR. 
244 In the case that you did not specify a \f(CW\*(C`to\*(C'\fR argument, the output
245 file will be the name of the archive file, stripped from its \f(CW\*(C`.gz\*(C'\fR
246 suffix, in the current working directory.
247 .PP
248 \&\f(CW\*(C`extract\*(C'\fR will try a pure perl solution first, and then fall back to
249 commandline tools if they are available. See the \f(CW\*(C`GLOBAL VARIABLES\*(C'\fR
250 section below on how to alter this behaviour.
251 .PP
252 It will return true on success, and false on failure.
253 .PP
254 On success, it will also set the follow attributes in the object:
255 .ie n .IP "$ae\->extract_path" 4
256 .el .IP "\f(CW$ae\fR\->extract_path" 4
257 .IX Item "$ae->extract_path"
258 This is the directory that the files where extracted to.
259 .ie n .IP "$ae\->files" 4
260 .el .IP "\f(CW$ae\fR\->files" 4
261 .IX Item "$ae->files"
262 This is an array ref with the paths of all the files in the archive,
263 relative to the \f(CW\*(C`to\*(C'\fR argument you specified.
264 To get the full path to an extracted file, you would use:
265 .Sp
266 .Vb 1
267 \&    File::Spec\->catfile( $to, $ae\->files\->[0] );
268 .Ve
269 .Sp
270 Note that all files from a tar archive will be in unix format, as per
271 the tar specification.
272 .SH "ACCESSORS"
273 .IX Header "ACCESSORS"
274 .ie n .SS "$ae\->error([\s-1BOOL\s0])"
275 .el .SS "\f(CW$ae\fP\->error([\s-1BOOL\s0])"
276 .IX Subsection "$ae->error([BOOL])"
277 Returns the last encountered error as string.
278 Pass it a true value to get the \f(CW\*(C`Carp::longmess()\*(C'\fR output instead.
279 .ie n .SS "$ae\->extract_path"
280 .el .SS "\f(CW$ae\fP\->extract_path"
281 .IX Subsection "$ae->extract_path"
282 This is the directory the archive got extracted to.
283 See \f(CW\*(C`extract()\*(C'\fR for details.
284 .ie n .SS "$ae\->files"
285 .el .SS "\f(CW$ae\fP\->files"
286 .IX Subsection "$ae->files"
287 This is an array ref holding all the paths from the archive.
288 See \f(CW\*(C`extract()\*(C'\fR for details.
289 .ie n .SS "$ae\->archive"
290 .el .SS "\f(CW$ae\fP\->archive"
291 .IX Subsection "$ae->archive"
292 This is the full path to the archive file represented by this
293 \&\f(CW\*(C`Archive::Extract\*(C'\fR object.
294 .ie n .SS "$ae\->type"
295 .el .SS "\f(CW$ae\fP\->type"
296 .IX Subsection "$ae->type"
297 This is the type of archive represented by this \f(CW\*(C`Archive::Extract\*(C'\fR
298 object. See accessors below for an easier way to use this.
299 See the \f(CW\*(C`new()\*(C'\fR method for details.
300 .ie n .SS "$ae\->types"
301 .el .SS "\f(CW$ae\fP\->types"
302 .IX Subsection "$ae->types"
303 Returns a list of all known \f(CW\*(C`types\*(C'\fR for \f(CW\*(C`Archive::Extract\*(C'\fR's
304 \&\f(CW\*(C`new\*(C'\fR method.
305 .ie n .SS "$ae\->is_tgz"
306 .el .SS "\f(CW$ae\fP\->is_tgz"
307 .IX Subsection "$ae->is_tgz"
308 Returns true if the file is of type \f(CW\*(C`.tar.gz\*(C'\fR.
309 See the \f(CW\*(C`new()\*(C'\fR method for details.
310 .ie n .SS "$ae\->is_tar"
311 .el .SS "\f(CW$ae\fP\->is_tar"
312 .IX Subsection "$ae->is_tar"
313 Returns true if the file is of type \f(CW\*(C`.tar\*(C'\fR.
314 See the \f(CW\*(C`new()\*(C'\fR method for details.
315 .ie n .SS "$ae\->is_gz"
316 .el .SS "\f(CW$ae\fP\->is_gz"
317 .IX Subsection "$ae->is_gz"
318 Returns true if the file is of type \f(CW\*(C`.gz\*(C'\fR.
319 See the \f(CW\*(C`new()\*(C'\fR method for details.
320 .ie n .SS "$ae\->is_Z"
321 .el .SS "\f(CW$ae\fP\->is_Z"
322 .IX Subsection "$ae->is_Z"
323 Returns true if the file is of type \f(CW\*(C`.Z\*(C'\fR.
324 See the \f(CW\*(C`new()\*(C'\fR method for details.
325 .ie n .SS "$ae\->is_zip"
326 .el .SS "\f(CW$ae\fP\->is_zip"
327 .IX Subsection "$ae->is_zip"
328 Returns true if the file is of type \f(CW\*(C`.zip\*(C'\fR.
329 See the \f(CW\*(C`new()\*(C'\fR method for details.
330 .ie n .SS "$ae\->is_lzma"
331 .el .SS "\f(CW$ae\fP\->is_lzma"
332 .IX Subsection "$ae->is_lzma"
333 Returns true if the file is of type \f(CW\*(C`.lzma\*(C'\fR.
334 See the \f(CW\*(C`new()\*(C'\fR method for details.
335 .ie n .SS "$ae\->bin_tar"
336 .el .SS "\f(CW$ae\fP\->bin_tar"
337 .IX Subsection "$ae->bin_tar"
338 Returns the full path to your tar binary, if found.
339 .ie n .SS "$ae\->bin_gzip"
340 .el .SS "\f(CW$ae\fP\->bin_gzip"
341 .IX Subsection "$ae->bin_gzip"
342 Returns the full path to your gzip binary, if found
343 .ie n .SS "$ae\->bin_unzip"
344 .el .SS "\f(CW$ae\fP\->bin_unzip"
345 .IX Subsection "$ae->bin_unzip"
346 Returns the full path to your unzip binary, if found
347 .ie n .SS "$ae\->bin_unlzma"
348 .el .SS "\f(CW$ae\fP\->bin_unlzma"
349 .IX Subsection "$ae->bin_unlzma"
350 Returns the full path to your unlzma binary, if found
351 .ie n .SS "$bool = $ae\->have_old_bunzip2"
352 .el .SS "\f(CW$bool\fP = \f(CW$ae\fP\->have_old_bunzip2"
353 .IX Subsection "$bool = $ae->have_old_bunzip2"
354 Older versions of \f(CW\*(C`/bin/bunzip2\*(C'\fR, from before the \f(CW\*(C`bunzip2 1.0\*(C'\fR release,
355 require all archive names to end in \f(CW\*(C`.bz2\*(C'\fR or it will not extract
356 them. This method checks if you have a recent version of \f(CW\*(C`bunzip2\*(C'\fR
357 that allows any extension, or an older one that doesn't.
358 .SH "HOW IT WORKS"
359 .IX Header "HOW IT WORKS"
360 \&\f(CW\*(C`Archive::Extract\*(C'\fR tries first to determine what type of archive you
361 are passing it, by inspecting its suffix. It does not do this by using
362 Mime magic, or something related. See \f(CW\*(C`CAVEATS\*(C'\fR below.
363 .PP
364 Once it has determined the file type, it knows which extraction methods
365 it can use on the archive. It will try a perl solution first, then fall
366 back to a commandline tool if that fails. If that also fails, it will
367 return false, indicating it was unable to extract the archive.
368 See the section on \f(CW\*(C`GLOBAL VARIABLES\*(C'\fR to see how to alter this order.
369 .SH "CAVEATS"
370 .IX Header "CAVEATS"
371 .SS "File Extensions"
372 .IX Subsection "File Extensions"
373 \&\f(CW\*(C`Archive::Extract\*(C'\fR trusts on the extension of the archive to determine
374 what type it is, and what extractor methods therefore can be used. If
375 your archives do not have any of the extensions as described in the
376 \&\f(CW\*(C`new()\*(C'\fR method, you will have to specify the type explicitly, or
377 \&\f(CW\*(C`Archive::Extract\*(C'\fR will not be able to extract the archive for you.
378 .SS "Supporting Very Large Files"
379 .IX Subsection "Supporting Very Large Files"
380 \&\f(CW\*(C`Archive::Extract\*(C'\fR can use either pure perl modules or command line
381 programs under the hood. Some of the pure perl modules (like 
382 \&\f(CW\*(C`Archive::Tar\*(C'\fR and Compress::unLZMA) take the entire contents of the archive into memory,
383 which may not be feasible on your system. Consider setting the global
384 variable \f(CW$Archive::Extract::PREFER_BIN\fR to \f(CW1\fR, which will prefer
385 the use of command line programs and won't consume so much memory.
386 .PP
387 See the \f(CW\*(C`GLOBAL VARIABLES\*(C'\fR section below for details.
388 .SS "Bunzip2 support of arbitrary extensions."
389 .IX Subsection "Bunzip2 support of arbitrary extensions."
390 Older versions of \f(CW\*(C`/bin/bunzip2\*(C'\fR do not support arbitrary file 
391 extensions and insist on a \f(CW\*(C`.bz2\*(C'\fR suffix. Although we do our best
392 to guard against this, if you experience a bunzip2 error, it may
393 be related to this. For details, please see the \f(CW\*(C`have_old_bunzip2\*(C'\fR
394 method.
395 .SH "GLOBAL VARIABLES"
396 .IX Header "GLOBAL VARIABLES"
397 .ie n .SS "$Archive::Extract::DEBUG"
398 .el .SS "\f(CW$Archive::Extract::DEBUG\fP"
399 .IX Subsection "$Archive::Extract::DEBUG"
400 Set this variable to \f(CW\*(C`true\*(C'\fR to have all calls to command line tools
401 be printed out, including all their output.
402 This also enables \f(CW\*(C`Carp::longmess\*(C'\fR errors, instead of the regular
403 \&\f(CW\*(C`carp\*(C'\fR errors.
404 .PP
405 Good for tracking down why things don't work with your particular
406 setup.
407 .PP
408 Defaults to \f(CW\*(C`false\*(C'\fR.
409 .ie n .SS "$Archive::Extract::WARN"
410 .el .SS "\f(CW$Archive::Extract::WARN\fP"
411 .IX Subsection "$Archive::Extract::WARN"
412 This variable controls whether errors encountered internally by
413 \&\f(CW\*(C`Archive::Extract\*(C'\fR should be \f(CW\*(C`carp\*(C'\fR'd or not.
414 .PP
415 Set to false to silence warnings. Inspect the output of the \f(CW\*(C`error()\*(C'\fR
416 method manually to see what went wrong.
417 .PP
418 Defaults to \f(CW\*(C`true\*(C'\fR.
419 .ie n .SS "$Archive::Extract::PREFER_BIN"
420 .el .SS "\f(CW$Archive::Extract::PREFER_BIN\fP"
421 .IX Subsection "$Archive::Extract::PREFER_BIN"
422 This variables controls whether \f(CW\*(C`Archive::Extract\*(C'\fR should prefer the
423 use of perl modules, or commandline tools to extract archives.
424 .PP
425 Set to \f(CW\*(C`true\*(C'\fR to have \f(CW\*(C`Archive::Extract\*(C'\fR prefer commandline tools.
426 .PP
427 Defaults to \f(CW\*(C`false\*(C'\fR.
428 .SH "TODO / CAVEATS"
429 .IX Header "TODO / CAVEATS"
430 .IP "Mime magic support" 4
431 .IX Item "Mime magic support"
432 Maybe this module should use something like \f(CW\*(C`File::Type\*(C'\fR to determine
433 the type, rather than blindly trust the suffix.
434 .IP "Thread safety" 4
435 .IX Item "Thread safety"
436 Currently, \f(CW\*(C`Archive::Extract\*(C'\fR does a \f(CW\*(C`chdir\*(C'\fR to the extraction dir before
437 extraction, and a \f(CW\*(C`chdir\*(C'\fR back again after. This is not necessarily 
438 thread safe. See \f(CW\*(C`rt.cpan.org\*(C'\fR bug \f(CW\*(C`#45671\*(C'\fR for details.
439 .SH "BUG REPORTS"
440 .IX Header "BUG REPORTS"
441 Please report bugs or other issues to <bug\-archive\-extract@rt.cpan.org<gt>.
442 .SH "AUTHOR"
443 .IX Header "AUTHOR"
444 This module by Jos Boumans <kane@cpan.org>.
445 .SH "COPYRIGHT"
446 .IX Header "COPYRIGHT"
447 This library is free software; you may redistribute and/or modify it 
448 under the same terms as Perl itself.