exiftool-vendored.exe 12.82.0 → 12.82.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/README.md +6 -0
  2. package/bin/exiftool.exe +0 -0
  3. package/bin/exiftool_files/Licenses_Strawberry_Perl.zip +0 -0
  4. package/bin/exiftool_files/lib/Archive/Zip/Archive.pm +399 -65
  5. package/bin/exiftool_files/lib/Archive/Zip/DirectoryMember.pm +1 -1
  6. package/bin/exiftool_files/lib/Archive/Zip/FileMember.pm +1 -1
  7. package/bin/exiftool_files/lib/Archive/Zip/Member.pm +499 -195
  8. package/bin/exiftool_files/lib/Archive/Zip/NewFileMember.pm +1 -1
  9. package/bin/exiftool_files/lib/Archive/Zip/StringMember.pm +2 -2
  10. package/bin/exiftool_files/lib/Archive/Zip/ZipFileMember.pm +79 -20
  11. package/bin/exiftool_files/lib/Archive/Zip.pm +179 -29
  12. package/bin/exiftool_files/lib/AutoLoader.pm +453 -0
  13. package/bin/exiftool_files/lib/B/Deparse.pm +209 -137
  14. package/bin/exiftool_files/lib/B.pm +1 -1
  15. package/bin/exiftool_files/lib/Benchmark.pm +1123 -0
  16. package/bin/exiftool_files/lib/Class/Struct.pm +2 -2
  17. package/bin/exiftool_files/lib/Compress/Raw/Bzip2.pm +14 -9
  18. package/bin/exiftool_files/lib/Compress/Raw/Lzma.pm +982 -0
  19. package/bin/exiftool_files/lib/Compress/Raw/Zlib.pm +91 -86
  20. package/bin/exiftool_files/lib/Compress/Zlib.pm +105 -100
  21. package/bin/exiftool_files/lib/Config.pm +9 -9
  22. package/bin/exiftool_files/lib/Config_heavy.pl +36 -33
  23. package/bin/exiftool_files/lib/CryptX.pm +2 -82
  24. package/bin/exiftool_files/lib/Data/Dumper.pm +2 -2
  25. package/bin/exiftool_files/lib/Digest/MD5.pm +12 -9
  26. package/bin/exiftool_files/lib/Digest/Perl/MD5.pm +1 -191
  27. package/bin/exiftool_files/lib/Digest/base.pm +26 -20
  28. package/bin/exiftool_files/lib/DynaLoader.pm +7 -4
  29. package/bin/exiftool_files/lib/Encode.pm +3 -3
  30. package/bin/exiftool_files/lib/Errno.pm +13 -13
  31. package/bin/exiftool_files/lib/Exporter/Heavy.pm +2 -2
  32. package/bin/exiftool_files/lib/Exporter.pm +1 -1
  33. package/bin/exiftool_files/lib/ExtUtils/Command/MM.pm +323 -0
  34. package/bin/exiftool_files/lib/ExtUtils/Command.pm +382 -0
  35. package/bin/exiftool_files/lib/File/Find.pm +1 -1
  36. package/bin/exiftool_files/lib/File/Glob.pm +1 -8
  37. package/bin/exiftool_files/lib/File/GlobMapper.pm +2 -2
  38. package/bin/exiftool_files/lib/File/HomeDir/Darwin/Carbon.pm +2 -40
  39. package/bin/exiftool_files/lib/File/HomeDir/Darwin/Cocoa.pm +2 -34
  40. package/bin/exiftool_files/lib/File/HomeDir/Darwin.pm +2 -28
  41. package/bin/exiftool_files/lib/File/HomeDir/Driver.pm +2 -35
  42. package/bin/exiftool_files/lib/File/HomeDir/FreeDesktop.pm +2 -62
  43. package/bin/exiftool_files/lib/File/HomeDir/MacOS9.pm +2 -53
  44. package/bin/exiftool_files/lib/File/HomeDir/Test.pm +2 -43
  45. package/bin/exiftool_files/lib/File/HomeDir/Unix.pm +2 -53
  46. package/bin/exiftool_files/lib/File/HomeDir/Windows.pm +2 -69
  47. package/bin/exiftool_files/lib/File/HomeDir.pm +5 -416
  48. package/bin/exiftool_files/lib/File/Path.pm +3 -3
  49. package/bin/exiftool_files/lib/File/Spec/Win32.pm +2 -2
  50. package/bin/exiftool_files/lib/File/Temp.pm +70 -35
  51. package/bin/exiftool_files/lib/File/Which.pm +1 -240
  52. package/bin/exiftool_files/lib/File/stat.pm +3 -2
  53. package/bin/exiftool_files/lib/IO/Compress/Adapter/Bzip2.pm +16 -17
  54. package/bin/exiftool_files/lib/IO/Compress/Adapter/Deflate.pm +19 -20
  55. package/bin/exiftool_files/lib/IO/Compress/Base/Common.pm +5 -5
  56. package/bin/exiftool_files/lib/IO/Compress/Base.pm +35 -26
  57. package/bin/exiftool_files/lib/IO/Compress/Brotli.pm +159 -0
  58. package/bin/exiftool_files/lib/IO/Compress/Bzip2.pm +50 -25
  59. package/bin/exiftool_files/lib/IO/Compress/Gzip/Constants.pm +6 -6
  60. package/bin/exiftool_files/lib/IO/Compress/Gzip.pm +58 -32
  61. package/bin/exiftool_files/lib/IO/Compress/RawDeflate.pm +63 -38
  62. package/bin/exiftool_files/lib/IO/Compress/Zlib/Extra.pm +20 -20
  63. package/bin/exiftool_files/lib/IO/Dir.pm +1 -1
  64. package/bin/exiftool_files/lib/IO/File.pm +1 -1
  65. package/bin/exiftool_files/lib/IO/Handle.pm +1 -21
  66. package/bin/exiftool_files/lib/IO/Pipe.pm +1 -1
  67. package/bin/exiftool_files/lib/IO/Seekable.pm +1 -1
  68. package/bin/exiftool_files/lib/IO/Select.pm +16 -2
  69. package/bin/exiftool_files/lib/IO/Socket/INET.pm +14 -9
  70. package/bin/exiftool_files/lib/IO/Socket/UNIX.pm +17 -1
  71. package/bin/exiftool_files/lib/IO/Socket.pm +474 -126
  72. package/bin/exiftool_files/lib/IO/String.pm +425 -0
  73. package/bin/exiftool_files/lib/IO/Uncompress/Adapter/Inflate.pm +13 -14
  74. package/bin/exiftool_files/lib/IO/Uncompress/Base.pm +142 -132
  75. package/bin/exiftool_files/lib/IO/Uncompress/Brotli.pm +119 -0
  76. package/bin/exiftool_files/lib/IO/Uncompress/Gunzip.pm +43 -37
  77. package/bin/exiftool_files/lib/IO/Uncompress/RawInflate.pm +49 -43
  78. package/bin/exiftool_files/lib/IO.pm +2 -2
  79. package/bin/exiftool_files/lib/List/Util.pm +97 -8
  80. package/bin/exiftool_files/lib/MIME/Base64.pm +5 -5
  81. package/bin/exiftool_files/lib/MIME/Charset/_Compat.pm +106 -0
  82. package/bin/exiftool_files/lib/MIME/Charset.pm +1303 -0
  83. package/bin/exiftool_files/lib/Math/BigFloat.pm +444 -27
  84. package/bin/exiftool_files/lib/Math/BigInt/Calc.pm +296 -313
  85. package/bin/exiftool_files/lib/Math/BigInt/FastCalc.pm +1 -1
  86. package/bin/exiftool_files/lib/Math/BigInt/GMP.pm +2 -115
  87. package/bin/exiftool_files/lib/Math/BigInt/LTM.pm +2 -24
  88. package/bin/exiftool_files/lib/Math/BigInt/Lib.pm +61 -32
  89. package/bin/exiftool_files/lib/Math/BigInt.pm +292 -107
  90. package/bin/exiftool_files/lib/POSIX.pm +1 -1
  91. package/bin/exiftool_files/lib/PerlIO/scalar.pm +41 -0
  92. package/bin/exiftool_files/lib/PerlIO.pm +397 -0
  93. package/bin/exiftool_files/lib/Portable/CPAN.pm +94 -94
  94. package/bin/exiftool_files/lib/Portable/Config.pm +94 -94
  95. package/bin/exiftool_files/lib/Portable/FileSpec.pm +180 -180
  96. package/bin/exiftool_files/lib/Portable/HomeDir.pm +110 -110
  97. package/bin/exiftool_files/lib/Portable/LoadYaml.pm +430 -430
  98. package/bin/exiftool_files/lib/Portable/minicpan.pm +55 -55
  99. package/bin/exiftool_files/lib/Portable.pm +246 -320
  100. package/bin/exiftool_files/lib/Scalar/Util.pm +9 -4
  101. package/bin/exiftool_files/lib/Socket.pm +16 -12
  102. package/bin/exiftool_files/lib/Storable.pm +1444 -1441
  103. package/bin/exiftool_files/lib/TAP/Base.pm +133 -0
  104. package/bin/exiftool_files/lib/TAP/Formatter/Base.pm +467 -0
  105. package/bin/exiftool_files/lib/TAP/Formatter/Color.pm +116 -0
  106. package/bin/exiftool_files/lib/TAP/Formatter/Console/ParallelSession.pm +201 -0
  107. package/bin/exiftool_files/lib/TAP/Formatter/Console/Session.pm +205 -0
  108. package/bin/exiftool_files/lib/TAP/Formatter/Console.pm +100 -0
  109. package/bin/exiftool_files/lib/TAP/Formatter/File/Session.pm +95 -0
  110. package/bin/exiftool_files/lib/TAP/Formatter/File.pm +56 -0
  111. package/bin/exiftool_files/lib/TAP/Formatter/Session.pm +220 -0
  112. package/bin/exiftool_files/lib/TAP/Harness/Beyond.pod +426 -0
  113. package/bin/exiftool_files/lib/TAP/Harness/Env.pm +215 -0
  114. package/bin/exiftool_files/lib/TAP/Harness.pm +1054 -0
  115. package/bin/exiftool_files/lib/TAP/Object.pm +155 -0
  116. package/bin/exiftool_files/lib/TAP/Parser/Aggregator.pm +414 -0
  117. package/bin/exiftool_files/lib/TAP/Parser/Grammar.pm +584 -0
  118. package/bin/exiftool_files/lib/TAP/Parser/Iterator/Array.pm +100 -0
  119. package/bin/exiftool_files/lib/TAP/Parser/Iterator/Process.pm +378 -0
  120. package/bin/exiftool_files/lib/TAP/Parser/Iterator/Stream.pm +116 -0
  121. package/bin/exiftool_files/lib/TAP/Parser/Iterator.pm +162 -0
  122. package/bin/exiftool_files/lib/TAP/Parser/IteratorFactory.pm +339 -0
  123. package/bin/exiftool_files/lib/TAP/Parser/Multiplexer.pm +194 -0
  124. package/bin/exiftool_files/lib/TAP/Parser/Result/Bailout.pm +62 -0
  125. package/bin/exiftool_files/lib/TAP/Parser/Result/Comment.pm +60 -0
  126. package/bin/exiftool_files/lib/TAP/Parser/Result/Plan.pm +119 -0
  127. package/bin/exiftool_files/lib/TAP/Parser/Result/Pragma.pm +62 -0
  128. package/bin/exiftool_files/lib/TAP/Parser/Result/Test.pm +271 -0
  129. package/bin/exiftool_files/lib/TAP/Parser/Result/Unknown.pm +48 -0
  130. package/bin/exiftool_files/lib/TAP/Parser/Result/Version.pm +62 -0
  131. package/bin/exiftool_files/lib/TAP/Parser/Result/YAML.pm +61 -0
  132. package/bin/exiftool_files/lib/TAP/Parser/Result.pm +297 -0
  133. package/bin/exiftool_files/lib/TAP/Parser/ResultFactory.pm +183 -0
  134. package/bin/exiftool_files/lib/TAP/Parser/Scheduler/Job.pm +127 -0
  135. package/bin/exiftool_files/lib/TAP/Parser/Scheduler/Spinner.pm +61 -0
  136. package/bin/exiftool_files/lib/TAP/Parser/Scheduler.pm +448 -0
  137. package/bin/exiftool_files/lib/TAP/Parser/Source.pm +381 -0
  138. package/bin/exiftool_files/lib/TAP/Parser/SourceHandler/Executable.pm +184 -0
  139. package/bin/exiftool_files/lib/TAP/Parser/SourceHandler/File.pm +136 -0
  140. package/bin/exiftool_files/lib/TAP/Parser/SourceHandler/Handle.pm +124 -0
  141. package/bin/exiftool_files/lib/TAP/Parser/SourceHandler/Perl.pm +370 -0
  142. package/bin/exiftool_files/lib/TAP/Parser/SourceHandler/RawTAP.pm +130 -0
  143. package/bin/exiftool_files/lib/TAP/Parser/SourceHandler.pm +191 -0
  144. package/bin/exiftool_files/lib/TAP/Parser/YAMLish/Reader.pm +332 -0
  145. package/bin/exiftool_files/lib/TAP/Parser/YAMLish/Writer.pm +254 -0
  146. package/bin/exiftool_files/lib/TAP/Parser.pm +1931 -0
  147. package/bin/exiftool_files/lib/Test/Builder/Formatter.pm +107 -0
  148. package/bin/exiftool_files/lib/Test/Builder/IO/Scalar.pm +659 -0
  149. package/bin/exiftool_files/lib/Test/Builder/Module.pm +182 -0
  150. package/bin/exiftool_files/lib/Test/Builder/Tester/Color.pm +51 -0
  151. package/bin/exiftool_files/lib/Test/Builder/Tester.pm +675 -0
  152. package/bin/exiftool_files/lib/Test/Builder/TodoDiag.pm +68 -0
  153. package/bin/exiftool_files/lib/Test/Builder.pm +2653 -0
  154. package/bin/exiftool_files/lib/Test/Harness.pm +618 -0
  155. package/bin/exiftool_files/lib/Test/More.pm +1997 -0
  156. package/bin/exiftool_files/lib/Test/Simple.pm +220 -0
  157. package/bin/exiftool_files/lib/Test/Tester/Capture.pm +241 -0
  158. package/bin/exiftool_files/lib/Test/Tester/CaptureRunner.pm +79 -0
  159. package/bin/exiftool_files/lib/Test/Tester/Delegate.pm +45 -0
  160. package/bin/exiftool_files/lib/Test/Tester.pm +695 -0
  161. package/bin/exiftool_files/lib/Test/Tutorial.pod +618 -0
  162. package/bin/exiftool_files/lib/Test/use/ok.pm +64 -0
  163. package/bin/exiftool_files/lib/Text/ParseWords.pm +303 -0
  164. package/bin/exiftool_files/lib/Tie/StdHandle.pm +2 -2
  165. package/bin/exiftool_files/lib/Time/HiRes.pm +73 -68
  166. package/bin/exiftool_files/lib/Time/Local.pm +82 -35
  167. package/bin/exiftool_files/lib/Time/Piece.pm +19 -4
  168. package/bin/exiftool_files/lib/Time/Seconds.pm +1 -1
  169. package/bin/exiftool_files/lib/UNIVERSAL.pm +203 -0
  170. package/bin/exiftool_files/lib/Unicode/GCString.pm +60 -0
  171. package/bin/exiftool_files/lib/Unicode/LineBreak/Constants.pm +68 -0
  172. package/bin/exiftool_files/lib/Unicode/LineBreak.pm +248 -0
  173. package/bin/exiftool_files/lib/Win32/API/Struct.pm +1 -177
  174. package/bin/exiftool_files/lib/Win32/API/Type.pm +1 -100
  175. package/bin/exiftool_files/lib/Win32/API.pm +1 -830
  176. package/bin/exiftool_files/lib/Win32/FindFile.pm +2 -123
  177. package/bin/exiftool_files/lib/Win32.pm +213 -89
  178. package/bin/exiftool_files/lib/Win32API/File.pm +1 -1
  179. package/bin/exiftool_files/lib/auto/B/B.xs.dll +0 -0
  180. package/bin/exiftool_files/lib/auto/Compress/Raw/Bzip2/Bzip2.xs.dll +0 -0
  181. package/bin/exiftool_files/lib/auto/Compress/Raw/Lzma/Lzma.xs.dll +0 -0
  182. package/bin/exiftool_files/lib/auto/Compress/Raw/Lzma/autosplit.ix +3 -0
  183. package/bin/exiftool_files/lib/auto/Compress/Raw/Zlib/Zlib.xs.dll +0 -0
  184. package/bin/exiftool_files/lib/auto/CryptX/CryptX.xs.dll +0 -0
  185. package/bin/exiftool_files/lib/auto/Cwd/Cwd.xs.dll +0 -0
  186. package/bin/exiftool_files/lib/auto/Data/Dumper/Dumper.xs.dll +0 -0
  187. package/bin/exiftool_files/lib/auto/Digest/MD5/MD5.xs.dll +0 -0
  188. package/bin/exiftool_files/lib/auto/Digest/SHA/SHA.xs.dll +0 -0
  189. package/bin/exiftool_files/lib/auto/Encode/Encode.xs.dll +0 -0
  190. package/bin/exiftool_files/lib/auto/Fcntl/Fcntl.xs.dll +0 -0
  191. package/bin/exiftool_files/lib/auto/File/Glob/Glob.xs.dll +0 -0
  192. package/bin/exiftool_files/lib/auto/IO/Compress/Brotli/Brotli.xs.dll +0 -0
  193. package/bin/exiftool_files/lib/auto/IO/IO.xs.dll +0 -0
  194. package/bin/exiftool_files/lib/auto/List/Util/Util.xs.dll +0 -0
  195. package/bin/exiftool_files/lib/auto/MIME/Base64/Base64.xs.dll +0 -0
  196. package/bin/exiftool_files/lib/auto/Math/BigInt/FastCalc/FastCalc.xs.dll +0 -0
  197. package/bin/exiftool_files/lib/auto/Math/BigInt/GMP/GMP.xs.dll +0 -0
  198. package/bin/exiftool_files/lib/auto/POSIX/POSIX.xs.dll +0 -0
  199. package/bin/exiftool_files/lib/auto/PerlIO/scalar/scalar.xs.dll +0 -0
  200. package/bin/exiftool_files/lib/auto/Socket/Socket.xs.dll +0 -0
  201. package/bin/exiftool_files/lib/auto/Storable/Storable.xs.dll +0 -0
  202. package/bin/exiftool_files/lib/auto/Time/HiRes/HiRes.xs.dll +0 -0
  203. package/bin/exiftool_files/lib/auto/Time/Piece/Piece.xs.dll +0 -0
  204. package/bin/exiftool_files/lib/auto/Unicode/LineBreak/LineBreak.xs.dll +0 -0
  205. package/bin/exiftool_files/lib/auto/Win32/API/API.xs.dll +0 -0
  206. package/bin/exiftool_files/lib/auto/Win32/FindFile/FindFile.xs.dll +0 -0
  207. package/bin/exiftool_files/lib/auto/Win32/Win32.xs.dll +0 -0
  208. package/bin/exiftool_files/lib/auto/Win32API/File/File.xs.dll +0 -0
  209. package/bin/exiftool_files/lib/auto/mro/mro.xs.dll +0 -0
  210. package/bin/exiftool_files/lib/auto/re/re.xs.dll +0 -0
  211. package/bin/exiftool_files/lib/feature.pm +49 -17
  212. package/bin/exiftool_files/lib/mro.pm +4 -20
  213. package/bin/exiftool_files/lib/overload.pm +15 -15
  214. package/bin/exiftool_files/lib/parent.pm +10 -2
  215. package/bin/exiftool_files/lib/re.pm +91 -33
  216. package/bin/exiftool_files/lib/warnings.pm +17 -6
  217. package/bin/exiftool_files/libgcc_s_seh-1.dll +0 -0
  218. package/bin/exiftool_files/liblzma-5__.dll +0 -0
  219. package/bin/exiftool_files/libstdc++-6.dll +0 -0
  220. package/bin/exiftool_files/libwinpthread-1.dll +0 -0
  221. package/bin/exiftool_files/perl.exe +0 -0
  222. package/bin/exiftool_files/perl532.dll +0 -0
  223. package/package.json +5 -3
  224. package/bin/exiftool_files/libgcc_s_dw2-1.dll +0 -0
  225. package/bin/exiftool_files/perl530.dll +0 -0
@@ -0,0 +1,41 @@
1
+ package PerlIO::scalar;
2
+ our $VERSION = '0.30';
3
+ require XSLoader;
4
+ XSLoader::load();
5
+ 1;
6
+ __END__
7
+
8
+ =head1 NAME
9
+
10
+ PerlIO::scalar - in-memory IO, scalar IO
11
+
12
+ =head1 SYNOPSIS
13
+
14
+ my $scalar = '';
15
+ ...
16
+ open my $fh, "<", \$scalar or die;
17
+ open my $fh, ">", \$scalar or die;
18
+ open my $fh, ">>", \$scalar or die;
19
+
20
+ or
21
+
22
+ my $scalar = '';
23
+ ...
24
+ open my $fh, "<:scalar", \$scalar or die;
25
+ open my $fh, ">:scalar", \$scalar or die;
26
+ open my $fh, ">>:scalar", \$scalar or die;
27
+
28
+ =head1 DESCRIPTION
29
+
30
+ A filehandle is opened but the file operations are performed "in-memory"
31
+ on a scalar variable. All the normal file operations can be performed
32
+ on the handle. The scalar is considered a stream of bytes. Currently
33
+ fileno($fh) returns -1.
34
+
35
+ =head1 IMPLEMENTATION NOTE
36
+
37
+ C<PerlIO::scalar> only exists to use XSLoader to load C code that
38
+ provides support for treating a scalar as an "in memory" file.
39
+ One does not need to explicitly C<use PerlIO::scalar>.
40
+
41
+ =cut
@@ -0,0 +1,397 @@
1
+ package PerlIO;
2
+
3
+ our $VERSION = '1.11';
4
+
5
+ # Map layer name to package that defines it
6
+ our %alias;
7
+
8
+ sub import
9
+ {
10
+ my $class = shift;
11
+ while (@_)
12
+ {
13
+ my $layer = shift;
14
+ if (exists $alias{$layer})
15
+ {
16
+ $layer = $alias{$layer}
17
+ }
18
+ else
19
+ {
20
+ $layer = "${class}::$layer";
21
+ }
22
+ eval { require $layer =~ s{::}{/}gr . '.pm' };
23
+ warn $@ if $@;
24
+ }
25
+ }
26
+
27
+ sub F_UTF8 () { 0x8000 }
28
+
29
+ 1;
30
+ __END__
31
+
32
+ =head1 NAME
33
+
34
+ PerlIO - On demand loader for PerlIO layers and root of PerlIO::* name space
35
+
36
+ =head1 SYNOPSIS
37
+
38
+ # support platform-native and CRLF text files
39
+ open(my $fh, "<:crlf", "my.txt") or die "open failed: $!";
40
+
41
+ # append UTF-8 encoded text
42
+ open(my $fh, ">>:encoding(UTF-8)", "some.log")
43
+ or die "open failed: $!";
44
+
45
+ # portably open a binary file for reading
46
+ open(my $fh, "<", "his.jpg") or die "open failed: $!";
47
+ binmode($fh) or die "binmode failed: $!";
48
+
49
+ Shell:
50
+ PERLIO=:perlio perl ....
51
+
52
+ =head1 DESCRIPTION
53
+
54
+ When an undefined layer 'foo' is encountered in an C<open> or
55
+ C<binmode> layer specification then C code performs the equivalent of:
56
+
57
+ use PerlIO 'foo';
58
+
59
+ The Perl code in PerlIO.pm then attempts to locate a layer by doing
60
+
61
+ require PerlIO::foo;
62
+
63
+ Otherwise the C<PerlIO> package is a place holder for additional
64
+ PerlIO related functions.
65
+
66
+ =head2 Layers
67
+
68
+ Generally speaking, PerlIO layers (previously sometimes referred to as
69
+ "disciplines") are an ordered stack applied to a filehandle (specified as
70
+ a space- or colon-separated list, conventionally written with a leading
71
+ colon). Each layer performs some operation on any input or output, except
72
+ when bypassed such as with C<sysread> or C<syswrite>. Read operations go
73
+ through the stack in the order they are set (left to right), and write
74
+ operations in the reverse order.
75
+
76
+ There are also layers which actually just set flags on lower layers, or
77
+ layers that modify the current stack but don't persist on the stack
78
+ themselves; these are referred to as pseudo-layers.
79
+
80
+ When opening a handle, it will be opened with any layers specified
81
+ explicitly in the open() call (or the platform defaults, if specified as
82
+ a colon with no following layers).
83
+
84
+ If layers are not explicitly specified, the handle will be opened with the
85
+ layers specified by the L<${^OPEN}|perlvar/"${^OPEN}"> variable (usually
86
+ set by using the L<open> pragma for a lexical scope, or the C<-C>
87
+ command-line switch or C<PERL_UNICODE> environment variable for the main
88
+ program scope).
89
+
90
+ If layers are not specified in the open() call or C<${^OPEN}> variable,
91
+ the handle will be opened with the default layer stack configured for that
92
+ architecture; see L</"Defaults and how to override them">.
93
+
94
+ Some layers will automatically insert required lower level layers if not
95
+ present; for example C<:perlio> will insert C<:unix> below itself for low
96
+ level IO, and C<:encoding> will insert the platform defaults for buffered
97
+ IO.
98
+
99
+ The C<binmode> function can be called on an opened handle to push
100
+ additional layers onto the stack, which may also modify the existing
101
+ layers. C<binmode> called with no layers will remove or unset any
102
+ existing layers which transform the byte stream, making the handle
103
+ suitable for binary data.
104
+
105
+ The following layers are currently defined:
106
+
107
+ =over 4
108
+
109
+ =item :unix
110
+
111
+ Lowest level layer which provides basic PerlIO operations in terms of
112
+ UNIX/POSIX numeric file descriptor calls
113
+ (open(), read(), write(), lseek(), close()).
114
+ It is used even on non-Unix architectures, and most other layers operate on
115
+ top of it.
116
+
117
+ =item :stdio
118
+
119
+ Layer which calls C<fread>, C<fwrite> and C<fseek>/C<ftell> etc. Note
120
+ that as this is "real" stdio it will ignore any layers beneath it and
121
+ go straight to the operating system via the C library as usual.
122
+ This layer implements both low level IO and buffering, but is rarely used
123
+ on modern architectures.
124
+
125
+ =item :perlio
126
+
127
+ A from scratch implementation of buffering for PerlIO. Provides fast
128
+ access to the buffer for C<sv_gets> which implements Perl's readline/E<lt>E<gt>
129
+ and in general attempts to minimize data copying.
130
+
131
+ C<:perlio> will insert a C<:unix> layer below itself to do low level IO.
132
+
133
+ =item :crlf
134
+
135
+ A layer that implements DOS/Windows like CRLF line endings. On read
136
+ converts pairs of CR,LF to a single "\n" newline character. On write
137
+ converts each "\n" to a CR,LF pair. Note that this layer will silently
138
+ refuse to be pushed on top of itself.
139
+
140
+ It currently does I<not> mimic MS-DOS as far as treating of Control-Z
141
+ as being an end-of-file marker.
142
+
143
+ On DOS/Windows like architectures where this layer is part of the defaults,
144
+ it also acts like the C<:perlio> layer, and removing the CRLF translation
145
+ (such as with C<:raw>) will only unset the CRLF translation flag. Since
146
+ Perl 5.14, you can also apply another C<:crlf> layer later, such as when
147
+ the CRLF translation must occur after an encoding layer. On other
148
+ architectures, it is a mundane CRLF translation layer and can be added and
149
+ removed normally.
150
+
151
+ # translate CRLF after encoding on Perl 5.14 or newer
152
+ binmode $fh, ":raw:encoding(UTF-16LE):crlf"
153
+ or die "binmode failed: $!";
154
+
155
+ =item :utf8
156
+
157
+ Pseudo-layer that declares that the stream accepts Perl's I<internal>
158
+ upgraded encoding of characters, which is approximately UTF-8 on ASCII
159
+ machines, but UTF-EBCDIC on EBCDIC machines. This allows any character
160
+ Perl can represent to be read from or written to the stream.
161
+
162
+ This layer (which actually sets a flag on the preceding layer, and is
163
+ implicitly set by any C<:encoding> layer) does not translate or validate
164
+ byte sequences. It instead indicates that the byte stream will have been
165
+ arranged by other layers to be provided in Perl's internal upgraded
166
+ encoding, which Perl code (and correctly written XS code) will interpret
167
+ as decoded Unicode characters.
168
+
169
+ B<CAUTION>: Do not use this layer to translate from UTF-8 bytes, as
170
+ invalid UTF-8 or binary data will result in malformed Perl strings. It is
171
+ unlikely to produce invalid UTF-8 when used for output, though it will
172
+ instead produce UTF-EBCDIC on EBCDIC systems. The C<:encoding(UTF-8)>
173
+ layer (hyphen is significant) is preferred as it will ensure translation
174
+ between valid UTF-8 bytes and valid Unicode characters.
175
+
176
+ =item :bytes
177
+
178
+ This is the inverse of the C<:utf8> pseudo-layer. It turns off the flag
179
+ on the layer below so that data read from it is considered to
180
+ be Perl's internal downgraded encoding, thus interpreted as the native
181
+ single-byte encoding of Latin-1 or EBCDIC. Likewise on output Perl will
182
+ warn if a "wide" character (a codepoint not in the range 0..255) is
183
+ written to a such a stream.
184
+
185
+ This is very dangerous to push on a handle using an C<:encoding> layer,
186
+ as such a layer assumes to be working with Perl's internal upgraded
187
+ encoding, so you will likely get a mangled result. Instead use C<:raw> or
188
+ C<:pop> to remove encoding layers.
189
+
190
+ =item :raw
191
+
192
+ The C<:raw> pseudo-layer is I<defined> as being identical to calling
193
+ C<binmode($fh)> - the stream is made suitable for passing binary data,
194
+ i.e. each byte is passed as-is. The stream will still be buffered
195
+ (but this was not always true before Perl 5.14).
196
+
197
+ In Perl 5.6 and some books the C<:raw> layer is documented as the inverse
198
+ of the C<:crlf> layer. That is no longer the case - other layers which
199
+ would alter the binary nature of the stream are also disabled. If you
200
+ want UNIX line endings on a platform that normally does CRLF translation,
201
+ but still want UTF-8 or encoding defaults, the appropriate thing to do is
202
+ to add C<:perlio> to the PERLIO environment variable, or open the handle
203
+ explicitly with that layer, to replace the platform default of C<:crlf>.
204
+
205
+ The implementation of C<:raw> is as a pseudo-layer which when "pushed"
206
+ pops itself and then any layers which would modify the binary data stream.
207
+ (Undoing C<:utf8> and C<:crlf> may be implemented by clearing flags
208
+ rather than popping layers but that is an implementation detail.)
209
+
210
+ As a consequence of the fact that C<:raw> normally pops layers,
211
+ it usually only makes sense to have it as the only or first element in
212
+ a layer specification. When used as the first element it provides
213
+ a known base on which to build e.g.
214
+
215
+ open(my $fh,">:raw:encoding(UTF-8)",...)
216
+ or die "open failed: $!";
217
+
218
+ will construct a "binary" stream regardless of the platform defaults,
219
+ but then enable UTF-8 translation.
220
+
221
+ =item :pop
222
+
223
+ A pseudo-layer that removes the top-most layer. Gives Perl code a
224
+ way to manipulate the layer stack. Note that C<:pop> only works on
225
+ real layers and will not undo the effects of pseudo-layers or flags
226
+ like C<:utf8>. An example of a possible use might be:
227
+
228
+ open(my $fh,...) or die "open failed: $!";
229
+ ...
230
+ binmode($fh,":encoding(...)") or die "binmode failed: $!";
231
+ # next chunk is encoded
232
+ ...
233
+ binmode($fh,":pop") or die "binmode failed: $!";
234
+ # back to un-encoded
235
+
236
+ A more elegant (and safer) interface is needed.
237
+
238
+ =item :win32
239
+
240
+ On Win32 platforms this I<experimental> layer uses the native "handle" IO
241
+ rather than the unix-like numeric file descriptor layer. Known to be
242
+ buggy as of Perl 5.8.2.
243
+
244
+ =back
245
+
246
+ =head2 Custom Layers
247
+
248
+ It is possible to write custom layers in addition to the above builtin
249
+ ones, both in C/XS and Perl, as a module named C<< PerlIO::<layer name> >>.
250
+ Some custom layers come with the Perl distribution.
251
+
252
+ =over 4
253
+
254
+ =item :encoding
255
+
256
+ Use C<:encoding(ENCODING)> to transparently do character set and encoding
257
+ transformations, for example from Shift-JIS to Unicode. Note that an
258
+ C<:encoding> also enables C<:utf8>. See L<PerlIO::encoding> for more
259
+ information.
260
+
261
+ =item :mmap
262
+
263
+ A layer which implements "reading" of files by using C<mmap()> to
264
+ make a (whole) file appear in the process's address space, and then
265
+ using that as PerlIO's "buffer". This I<may> be faster in certain
266
+ circumstances for large files, and may result in less physical memory
267
+ use when multiple processes are reading the same file.
268
+
269
+ Files which are not C<mmap()>-able revert to behaving like the C<:perlio>
270
+ layer. Writes also behave like the C<:perlio> layer, as C<mmap()> for write
271
+ needs extra house-keeping (to extend the file) which negates any advantage.
272
+
273
+ The C<:mmap> layer will not exist if the platform does not support C<mmap()>.
274
+ See L<PerlIO::mmap> for more information.
275
+
276
+ =item :via
277
+
278
+ C<:via(MODULE)> allows a transformation to be applied by an arbitrary Perl
279
+ module, for example compression / decompression, encryption / decryption.
280
+ See L<PerlIO::via> for more information.
281
+
282
+ =item :scalar
283
+
284
+ A layer implementing "in memory" files using scalar variables,
285
+ automatically used in place of the platform defaults for IO when opening
286
+ such a handle. As such, the scalar is expected to act like a file, only
287
+ containing or storing bytes. See L<PerlIO::scalar> for more information.
288
+
289
+ =back
290
+
291
+ =head2 Alternatives to raw
292
+
293
+ To get a binary stream an alternate method is to use:
294
+
295
+ open(my $fh,"<","whatever") or die "open failed: $!";
296
+ binmode($fh) or die "binmode failed: $!";
297
+
298
+ This has the advantage of being backward compatible with older versions
299
+ of Perl that did not use PerlIO or where C<:raw> was buggy (as it was
300
+ before Perl 5.14).
301
+
302
+ To get an unbuffered stream specify an unbuffered layer (e.g. C<:unix>)
303
+ in the open call:
304
+
305
+ open(my $fh,"<:unix",$path) or die "open failed: $!";
306
+
307
+ =head2 Defaults and how to override them
308
+
309
+ If the platform is MS-DOS like and normally does CRLF to "\n"
310
+ translation for text files then the default layers are:
311
+
312
+ :unix:crlf
313
+
314
+ Otherwise if C<Configure> found out how to do "fast" IO using the system's
315
+ stdio (not common on modern architectures), then the default layers are:
316
+
317
+ :stdio
318
+
319
+ Otherwise the default layers are
320
+
321
+ :unix:perlio
322
+
323
+ Note that the "default stack" depends on the operating system and on the
324
+ Perl version, and both the compile-time and runtime configurations of
325
+ Perl. The default can be overridden by setting the environment variable
326
+ PERLIO to a space or colon separated list of layers, however this cannot
327
+ be used to set layers that require loading modules like C<:encoding>.
328
+
329
+ This can be used to see the effect of/bugs in the various layers e.g.
330
+
331
+ cd .../perl/t
332
+ PERLIO=:stdio ./perl harness
333
+ PERLIO=:perlio ./perl harness
334
+
335
+ For the various values of PERLIO see L<perlrun/PERLIO>.
336
+
337
+ The following table summarizes the default layers on UNIX-like and
338
+ DOS-like platforms and depending on the setting of C<$ENV{PERLIO}>:
339
+
340
+ PERLIO UNIX-like DOS-like
341
+ ------ --------- --------
342
+ unset / "" :unix:perlio / :stdio [1] :unix:crlf
343
+ :stdio :stdio :stdio
344
+ :perlio :unix:perlio :unix:perlio
345
+
346
+ # [1] ":stdio" if Configure found out how to do "fast stdio" (depends
347
+ # on the stdio implementation) and in Perl 5.8, else ":unix:perlio"
348
+
349
+ =head2 Querying the layers of filehandles
350
+
351
+ The following returns the B<names> of the PerlIO layers on a filehandle.
352
+
353
+ my @layers = PerlIO::get_layers($fh); # Or FH, *FH, "FH".
354
+
355
+ The layers are returned in the order an open() or binmode() call would
356
+ use them, and without colons.
357
+
358
+ By default the layers from the input side of the filehandle are
359
+ returned; to get the output side, use the optional C<output> argument:
360
+
361
+ my @layers = PerlIO::get_layers($fh, output => 1);
362
+
363
+ (Usually the layers are identical on either side of a filehandle but
364
+ for example with sockets there may be differences.)
365
+
366
+ There is no set_layers(), nor does get_layers() return a tied array
367
+ mirroring the stack, or anything fancy like that. This is not
368
+ accidental or unintentional. The PerlIO layer stack is a bit more
369
+ complicated than just a stack (see for example the behaviour of C<:raw>).
370
+ You are supposed to use open() and binmode() to manipulate the stack.
371
+
372
+ B<Implementation details follow, please close your eyes.>
373
+
374
+ The arguments to layers are by default returned in parentheses after
375
+ the name of the layer, and certain layers (like C<:utf8>) are not real
376
+ layers but instead flags on real layers; to get all of these returned
377
+ separately, use the optional C<details> argument:
378
+
379
+ my @layer_and_args_and_flags = PerlIO::get_layers($fh, details => 1);
380
+
381
+ The result will be up to be three times the number of layers:
382
+ the first element will be a name, the second element the arguments
383
+ (unspecified arguments will be C<undef>), the third element the flags,
384
+ the fourth element a name again, and so forth.
385
+
386
+ B<You may open your eyes now.>
387
+
388
+ =head1 AUTHOR
389
+
390
+ Nick Ing-Simmons E<lt>nick@ing-simmons.netE<gt>
391
+
392
+ =head1 SEE ALSO
393
+
394
+ L<perlfunc/"binmode">, L<perlfunc/"open">, L<perlunicode>, L<perliol>,
395
+ L<Encode>
396
+
397
+ =cut
@@ -1,94 +1,94 @@
1
- package Portable::CPAN;
2
-
3
- use 5.008;
4
- use strict;
5
- use warnings;
6
- use Portable::FileSpec;
7
-
8
- our $VERSION = '1.22';
9
-
10
- # Create the enumerations
11
- our %bin = map { $_ => 1 } qw{
12
- bzip2 curl ftp gpg gzip lynx
13
- ncftp ncftpget pager patch
14
- shell tar unzip wget
15
- };
16
- our %post = map { $_ => 1 } qw{
17
- make_arg make_install_arg makepl_arg
18
- mbuild_arg mbuild_install_arg mbuildpl_arg
19
- };
20
- our %file = ( %bin, histfile => 1 );
21
-
22
-
23
-
24
-
25
-
26
- #####################################################################
27
- # Constructor
28
-
29
- sub new {
30
- my $class = shift;
31
- my $parent = shift;
32
- unless ( Portable::_HASH($parent->portable_cpan) ) {
33
- die('Missing or invalid cpan key in portable.perl');
34
- }
35
-
36
- # Create the object
37
- my $self = bless { }, $class;
38
-
39
- # Map the
40
- my $cpan = $parent->portable_cpan;
41
- my $root = $parent->dist_root;
42
- foreach my $key ( sort keys %$cpan ) {
43
- unless (
44
- defined $cpan->{$key}
45
- and
46
- length $cpan->{$key}
47
- and not
48
- $post{$key}
49
- ) {
50
- $self->{$key} = $cpan->{$key};
51
- next;
52
- }
53
- if ($file{$key}) {
54
- $self->{$key} = Portable::FileSpec::catfile($root, split /\//, $cpan->{$key});
55
- }
56
- else {
57
- $self->{$key} = Portable::FileSpec::catdir($root, split /\//, $cpan->{$key});
58
- }
59
- }
60
- my $config = $parent->config;
61
- foreach my $key ( sort keys %post ) {
62
- next unless defined $self->{$key};
63
- $self->{$key} =~ s/\$(\w+)/$config->{$1}/g;
64
- }
65
-
66
- return $self;
67
- }
68
-
69
- sub apply {
70
- my $self = shift;
71
- my $parent = shift;
72
-
73
- # Load the CPAN configuration
74
- require CPAN::Config;
75
-
76
- # Overwrite the CPAN config entries
77
- foreach my $key ( sort keys %$self ) {
78
- $CPAN::Config->{$key} = $self->{$key};
79
- }
80
-
81
- # Confirm we got all the paths
82
- my $volume = quotemeta $parent->dist_volume;
83
- foreach my $key ( sort keys %$CPAN::Config ) {
84
- next unless defined $CPAN::Config->{$key};
85
- next if $CPAN::Config->{$key} =~ /$volume/;
86
- next unless $CPAN::Config->{$key} =~ /\b[a-z]\:/i;
87
- next if -e $CPAN::Config->{$key};
88
- die "Failed to localize \$CPAN::Config->{$key} ($CPAN::Config->{$key})";
89
- }
90
-
91
- return 1;
92
- }
93
-
94
- 1;
1
+ package Portable::CPAN;
2
+
3
+ use 5.008;
4
+ use strict;
5
+ use warnings;
6
+ use Portable::FileSpec;
7
+
8
+ our $VERSION = '1.23';
9
+
10
+ # Create the enumerations
11
+ our %bin = map { $_ => 1 } qw{
12
+ bzip2 curl ftp gpg gzip lynx
13
+ ncftp ncftpget pager patch
14
+ shell tar unzip wget
15
+ };
16
+ our %post = map { $_ => 1 } qw{
17
+ make_arg make_install_arg makepl_arg
18
+ mbuild_arg mbuild_install_arg mbuildpl_arg
19
+ };
20
+ our %file = ( %bin, histfile => 1 );
21
+
22
+
23
+
24
+
25
+
26
+ #####################################################################
27
+ # Constructor
28
+
29
+ sub new {
30
+ my $class = shift;
31
+ my $parent = shift;
32
+ unless ( Portable::_HASH($parent->portable_cpan) ) {
33
+ die('Missing or invalid cpan key in portable.perl');
34
+ }
35
+
36
+ # Create the object
37
+ my $self = bless { }, $class;
38
+
39
+ # Map the
40
+ my $cpan = $parent->portable_cpan;
41
+ my $root = $parent->dist_root;
42
+ foreach my $key ( sort keys %$cpan ) {
43
+ unless (
44
+ defined $cpan->{$key}
45
+ and
46
+ length $cpan->{$key}
47
+ and not
48
+ $post{$key}
49
+ ) {
50
+ $self->{$key} = $cpan->{$key};
51
+ next;
52
+ }
53
+ if ($file{$key}) {
54
+ $self->{$key} = Portable::FileSpec::catfile($root, split /\//, $cpan->{$key});
55
+ }
56
+ else {
57
+ $self->{$key} = Portable::FileSpec::catdir($root, split /\//, $cpan->{$key});
58
+ }
59
+ }
60
+ my $config = $parent->config;
61
+ foreach my $key ( sort keys %post ) {
62
+ next unless defined $self->{$key};
63
+ $self->{$key} =~ s/\$(\w+)/$config->{$1}/g;
64
+ }
65
+
66
+ return $self;
67
+ }
68
+
69
+ sub apply {
70
+ my $self = shift;
71
+ my $parent = shift;
72
+
73
+ # Load the CPAN configuration
74
+ require CPAN::Config;
75
+
76
+ # Overwrite the CPAN config entries
77
+ foreach my $key ( sort keys %$self ) {
78
+ $CPAN::Config->{$key} = $self->{$key};
79
+ }
80
+
81
+ # Confirm we got all the paths
82
+ my $volume = quotemeta $parent->dist_volume;
83
+ foreach my $key ( sort keys %$CPAN::Config ) {
84
+ next unless defined $CPAN::Config->{$key};
85
+ next if $CPAN::Config->{$key} =~ /$volume/;
86
+ next unless $CPAN::Config->{$key} =~ /\b[a-z]\:/i;
87
+ next if -e $CPAN::Config->{$key};
88
+ die "Failed to localize \$CPAN::Config->{$key} ($CPAN::Config->{$key})";
89
+ }
90
+
91
+ return 1;
92
+ }
93
+
94
+ 1;