exiftool-vendored.pl 12.50.0 → 12.54.0

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 (203) hide show
  1. package/bin/Changes +69 -3
  2. package/bin/MANIFEST +2 -0
  3. package/bin/META.json +1 -1
  4. package/bin/META.yml +1 -1
  5. package/bin/README +3 -3
  6. package/bin/exiftool +12 -9
  7. package/bin/lib/File/RandomAccess.pm +1 -1
  8. package/bin/lib/File/RandomAccess.pod +2 -2
  9. package/bin/lib/Image/ExifTool/AES.pm +1 -1
  10. package/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  11. package/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  12. package/bin/lib/Image/ExifTool/APE.pm +1 -1
  13. package/bin/lib/Image/ExifTool/APP12.pm +1 -1
  14. package/bin/lib/Image/ExifTool/ASF.pm +1 -1
  15. package/bin/lib/Image/ExifTool/Apple.pm +197 -27
  16. package/bin/lib/Image/ExifTool/Audible.pm +1 -1
  17. package/bin/lib/Image/ExifTool/BMP.pm +1 -1
  18. package/bin/lib/Image/ExifTool/BPG.pm +1 -1
  19. package/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  20. package/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  21. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +3 -3
  22. package/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  23. package/bin/lib/Image/ExifTool/Canon.pm +14 -2
  24. package/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  25. package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  26. package/bin/lib/Image/ExifTool/CanonVRD.pm +9 -9
  27. package/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  28. package/bin/lib/Image/ExifTool/Casio.pm +4 -4
  29. package/bin/lib/Image/ExifTool/Charset.pm +1 -1
  30. package/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  31. package/bin/lib/Image/ExifTool/DJI.pm +1 -1
  32. package/bin/lib/Image/ExifTool/DNG.pm +1 -1
  33. package/bin/lib/Image/ExifTool/DPX.pm +1 -1
  34. package/bin/lib/Image/ExifTool/DV.pm +1 -1
  35. package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  36. package/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  37. package/bin/lib/Image/ExifTool/EXE.pm +1 -1
  38. package/bin/lib/Image/ExifTool/Exif.pm +5 -16
  39. package/bin/lib/Image/ExifTool/FITS.pm +1 -1
  40. package/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  41. package/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  42. package/bin/lib/Image/ExifTool/FLIR.pm +7 -6
  43. package/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  44. package/bin/lib/Image/ExifTool/Flash.pm +1 -1
  45. package/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  46. package/bin/lib/Image/ExifTool/Font.pm +1 -1
  47. package/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  48. package/bin/lib/Image/ExifTool/FujiFilm.pm +20 -13
  49. package/bin/lib/Image/ExifTool/GE.pm +1 -1
  50. package/bin/lib/Image/ExifTool/GIF.pm +1 -1
  51. package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  52. package/bin/lib/Image/ExifTool/GPS.pm +12 -6
  53. package/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  54. package/bin/lib/Image/ExifTool/Geotag.pm +13 -5
  55. package/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  56. package/bin/lib/Image/ExifTool/H264.pm +1 -1
  57. package/bin/lib/Image/ExifTool/HP.pm +1 -1
  58. package/bin/lib/Image/ExifTool/HTML.pm +1 -1
  59. package/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  60. package/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  61. package/bin/lib/Image/ExifTool/ICO.pm +1 -1
  62. package/bin/lib/Image/ExifTool/ID3.pm +1 -1
  63. package/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  64. package/bin/lib/Image/ExifTool/ISO.pm +1 -1
  65. package/bin/lib/Image/ExifTool/ITC.pm +1 -1
  66. package/bin/lib/Image/ExifTool/Import.pm +1 -1
  67. package/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  68. package/bin/lib/Image/ExifTool/JPEG.pm +2 -1
  69. package/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  70. package/bin/lib/Image/ExifTool/JSON.pm +1 -1
  71. package/bin/lib/Image/ExifTool/JVC.pm +1 -1
  72. package/bin/lib/Image/ExifTool/Jpeg2000.pm +35 -8
  73. package/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  74. package/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  75. package/bin/lib/Image/ExifTool/LIF.pm +1 -1
  76. package/bin/lib/Image/ExifTool/LNK.pm +1 -1
  77. package/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  78. package/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
  79. package/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  80. package/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  81. package/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  82. package/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  83. package/bin/lib/Image/ExifTool/Lang/fr.pm +6016 -760
  84. package/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  85. package/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  86. package/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  87. package/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  88. package/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  89. package/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  90. package/bin/lib/Image/ExifTool/Lang/sk.pm +1806 -0
  91. package/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  92. package/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  93. package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  94. package/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  95. package/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  96. package/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  97. package/bin/lib/Image/ExifTool/M2TS.pm +1 -1
  98. package/bin/lib/Image/ExifTool/MIE.pm +1 -1
  99. package/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  100. package/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  101. package/bin/lib/Image/ExifTool/MISB.pm +1 -1
  102. package/bin/lib/Image/ExifTool/MNG.pm +1 -1
  103. package/bin/lib/Image/ExifTool/MOI.pm +1 -1
  104. package/bin/lib/Image/ExifTool/MPC.pm +1 -1
  105. package/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  106. package/bin/lib/Image/ExifTool/MPF.pm +1 -1
  107. package/bin/lib/Image/ExifTool/MRC.pm +1 -1
  108. package/bin/lib/Image/ExifTool/MWG.pm +1 -1
  109. package/bin/lib/Image/ExifTool/MXF.pm +1 -1
  110. package/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  111. package/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  112. package/bin/lib/Image/ExifTool/Matroska.pm +262 -46
  113. package/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  114. package/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  115. package/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  116. package/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  117. package/bin/lib/Image/ExifTool/Nikon.pm +658 -276
  118. package/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  119. package/bin/lib/Image/ExifTool/NikonCustom.pm +140 -107
  120. package/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  121. package/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  122. package/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  123. package/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  124. package/bin/lib/Image/ExifTool/Olympus.pm +4 -3
  125. package/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  126. package/bin/lib/Image/ExifTool/Opus.pm +1 -1
  127. package/bin/lib/Image/ExifTool/Other.pm +1 -1
  128. package/bin/lib/Image/ExifTool/PCX.pm +1 -1
  129. package/bin/lib/Image/ExifTool/PDF.pm +1 -1
  130. package/bin/lib/Image/ExifTool/PGF.pm +1 -1
  131. package/bin/lib/Image/ExifTool/PICT.pm +1 -1
  132. package/bin/lib/Image/ExifTool/PLIST.pm +12 -7
  133. package/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  134. package/bin/lib/Image/ExifTool/PNG.pm +9 -2
  135. package/bin/lib/Image/ExifTool/PPM.pm +1 -1
  136. package/bin/lib/Image/ExifTool/PSP.pm +1 -1
  137. package/bin/lib/Image/ExifTool/Palm.pm +1 -1
  138. package/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  139. package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  140. package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  141. package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  142. package/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  143. package/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  144. package/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  145. package/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  146. package/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  147. package/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  148. package/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  149. package/bin/lib/Image/ExifTool/QuickTime.pm +8 -4
  150. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +63 -15
  151. package/bin/lib/Image/ExifTool/README +2 -1
  152. package/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  153. package/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  154. package/bin/lib/Image/ExifTool/RTF.pm +1 -1
  155. package/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  156. package/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  157. package/bin/lib/Image/ExifTool/Real.pm +1 -1
  158. package/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  159. package/bin/lib/Image/ExifTool/Red.pm +1 -1
  160. package/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  161. package/bin/lib/Image/ExifTool/Samsung.pm +3 -1
  162. package/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  163. package/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  164. package/bin/lib/Image/ExifTool/Shift.pl +1 -1
  165. package/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  166. package/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  167. package/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  168. package/bin/lib/Image/ExifTool/Sony.pm +7 -7
  169. package/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  170. package/bin/lib/Image/ExifTool/Stim.pm +1 -1
  171. package/bin/lib/Image/ExifTool/TagInfoXML.pm +13 -8
  172. package/bin/lib/Image/ExifTool/TagLookup.pm +4599 -4505
  173. package/bin/lib/Image/ExifTool/TagNames.pod +313 -39
  174. package/bin/lib/Image/ExifTool/Text.pm +1 -1
  175. package/bin/lib/Image/ExifTool/Theora.pm +1 -1
  176. package/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  177. package/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  178. package/bin/lib/Image/ExifTool/VCard.pm +1 -1
  179. package/bin/lib/Image/ExifTool/Validate.pm +1 -1
  180. package/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  181. package/bin/lib/Image/ExifTool/WTV.pm +1 -1
  182. package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  183. package/bin/lib/Image/ExifTool/WriteExif.pl +14 -1
  184. package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  185. package/bin/lib/Image/ExifTool/WritePDF.pl +5 -1
  186. package/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  187. package/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  188. package/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  189. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +30 -14
  190. package/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  191. package/bin/lib/Image/ExifTool/WriteXMP.pl +16 -2
  192. package/bin/lib/Image/ExifTool/Writer.pl +35 -15
  193. package/bin/lib/Image/ExifTool/XMP.pm +23 -3
  194. package/bin/lib/Image/ExifTool/XMP2.pl +20 -1
  195. package/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  196. package/bin/lib/Image/ExifTool/ZIP.pm +20 -8
  197. package/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  198. package/bin/lib/Image/ExifTool/iWork.pm +1 -1
  199. package/bin/lib/Image/ExifTool.pm +38 -16
  200. package/bin/lib/Image/ExifTool.pod +39 -38
  201. package/bin/perl-Image-ExifTool.spec +1 -1
  202. package/bin/pp_build_exe.args +6 -5
  203. package/package.json +3 -3
@@ -2863,7 +2863,7 @@ Panasonic and Leica maker notes in EXIF information.
2863
2863
 
2864
2864
  =head1 AUTHOR
2865
2865
 
2866
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
2866
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
2867
2867
 
2868
2868
  This library is free software; you can redistribute it and/or modify it
2869
2869
  under the same terms as Perl itself.
@@ -908,7 +908,7 @@ write meta information in Panasonic/Leica RAW, RW2 and RWL images.
908
908
 
909
909
  =head1 AUTHOR
910
910
 
911
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
911
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
912
912
 
913
913
  This library is free software; you can redistribute it and/or modify it
914
914
  under the same terms as Perl itself.
@@ -825,7 +825,7 @@ timed metadata from the 'mett' frame found in Parrot drone MP4 videos.
825
825
 
826
826
  =head1 AUTHOR
827
827
 
828
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
828
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
829
829
 
830
830
  This library is free software; you can redistribute it and/or modify it
831
831
  under the same terms as Perl itself.
@@ -6320,7 +6320,7 @@ tags, and everyone who helped contribute to the LensType values.
6320
6320
 
6321
6321
  =head1 AUTHOR
6322
6322
 
6323
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
6323
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
6324
6324
 
6325
6325
  This library is free software; you can redistribute it and/or modify it
6326
6326
  under the same terms as Perl itself.
@@ -712,7 +712,7 @@ One maker notes.
712
712
 
713
713
  =head1 AUTHOR
714
714
 
715
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
715
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
716
716
 
717
717
  This library is free software; you can redistribute it and/or modify it
718
718
  under the same terms as Perl itself.
@@ -484,7 +484,7 @@ information from Kodak Photo CD Image Pac (PCD) files.
484
484
 
485
485
  =head1 AUTHOR
486
486
 
487
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
487
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
488
488
 
489
489
  This library is free software; you can redistribute it and/or modify it
490
490
  under the same terms as Perl itself.
@@ -236,7 +236,7 @@ write information written by the Camera Bits Photo Mechanic software.
236
236
 
237
237
  =head1 AUTHOR
238
238
 
239
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
239
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
240
240
 
241
241
  This library is free software; you can redistribute it and/or modify it
242
242
  under the same terms as Perl itself.
@@ -1170,7 +1170,7 @@ be preserved when copying Photoshop information via user-defined tags.
1170
1170
 
1171
1171
  =head1 AUTHOR
1172
1172
 
1173
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
1173
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
1174
1174
 
1175
1175
  This library is free software; you can redistribute it and/or modify it
1176
1176
  under the same terms as Perl itself.
@@ -777,7 +777,7 @@ This code reads meta information from EPS (Encapsulated PostScript), PS
777
777
 
778
778
  =head1 AUTHOR
779
779
 
780
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
780
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
781
781
 
782
782
  This library is free software; you can redistribute it and/or modify it
783
783
  under the same terms as Perl itself.
@@ -112,7 +112,7 @@ Print Image Matching meta information.
112
112
 
113
113
  =head1 AUTHOR
114
114
 
115
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
115
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
116
116
 
117
117
  This library is free software; you can redistribute it and/or modify it
118
118
  under the same terms as Perl itself.
@@ -1331,7 +1331,7 @@ information from the APP7 Qualcomm segment in JPEG images.
1331
1331
 
1332
1332
  =head1 AUTHOR
1333
1333
 
1334
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
1334
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
1335
1335
 
1336
1336
  This library is free software; you can redistribute it and/or modify it
1337
1337
  under the same terms as Perl itself.
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
47
47
  use Image::ExifTool::Exif;
48
48
  use Image::ExifTool::GPS;
49
49
 
50
- $VERSION = '2.80';
50
+ $VERSION = '2.82';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -1352,12 +1352,14 @@ my %eeBox2 = (
1352
1352
  },
1353
1353
  { #https://github.com/google/spatial-media/blob/master/docs/spherical-video-rfc.md
1354
1354
  Name => 'SphericalVideoXML',
1355
+ # (this tag is readable/writable as a block through the Extra SphericalVideoXML tags)
1355
1356
  Condition => '$$valPt=~/^\xff\xcc\x82\x63\xf8\x55\x4a\x93\x88\x14\x58\x7a\x02\x52\x1f\xdd/',
1356
1357
  WriteGroup => 'GSpherical', # write only GSpherical XMP tags here
1357
1358
  HandlerType => 'vide', # only write in video tracks
1358
1359
  SubDirectory => {
1359
1360
  TagTable => 'Image::ExifTool::XMP::Main',
1360
1361
  Start => 16,
1362
+ ProcessProc => 'Image::ExifTool::XMP::ProcessGSpherical',
1361
1363
  WriteProc => 'Image::ExifTool::XMP::WriteGSpherical',
1362
1364
  },
1363
1365
  },
@@ -6034,6 +6036,7 @@ my %eeBox2 = (
6034
6036
  plID => { #10 (or TV season)
6035
6037
  Name => 'PlayListID',
6036
6038
  Format => 'int8u', # actually int64u, but split it up
6039
+ Count => 8,
6037
6040
  Writable => 'int32s', #27
6038
6041
  },
6039
6042
  purd => 'PurchaseDate', #7
@@ -9218,9 +9221,9 @@ sub ProcessMOV($$;$)
9218
9221
  } else {
9219
9222
  # check on file type if called with a RAF
9220
9223
  $$tagTablePtr{$tag} or return 0;
9224
+ my $fileType;
9221
9225
  if ($tag eq 'ftyp' and $size >= 12) {
9222
9226
  # read ftyp atom to see what type of file this is
9223
- my $fileType;
9224
9227
  if ($raf->Read($buff, $size-8) == $size-8) {
9225
9228
  $raf->Seek(-($size-8), 1);
9226
9229
  my $type = substr($buff, 0, 4);
@@ -9245,7 +9248,8 @@ sub ProcessMOV($$;$)
9245
9248
  $et->SetFileType(); # MOV
9246
9249
  }
9247
9250
  SetByteOrder('MM');
9248
- $$et{PRIORITY_DIR} = 'XMP'; # have XMP take priority
9251
+ # have XMP take priority except for HEIC
9252
+ $$et{PRIORITY_DIR} = 'XMP' unless $fileType and $fileType eq 'HEIC';
9249
9253
  }
9250
9254
  my $fast = $$et{OPTIONS}{FastScan} || 0;
9251
9255
  $$raf{NoBuffer} = 1 if $fast; # disable buffering in FastScan mode
@@ -9839,7 +9843,7 @@ information from QuickTime and MP4 video, M4A audio, and HEIC image files.
9839
9843
 
9840
9844
  =head1 AUTHOR
9841
9845
 
9842
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
9846
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
9843
9847
 
9844
9848
  This library is free software; you can redistribute it and/or modify it
9845
9849
  under the same terms as Perl itself.
@@ -26,6 +26,7 @@ sub ProcessFreeGPS($$$);
26
26
  sub ProcessFreeGPS2($$$);
27
27
  sub Process360Fly($$$);
28
28
  sub ProcessFMAS($$$);
29
+ sub ProcessCAMM($$$);
29
30
 
30
31
  my $debug; # set to 1 for extra debugging messages
31
32
 
@@ -101,7 +102,7 @@ my %insvLimit = (
101
102
  The tags below are extracted from timed metadata in QuickTime and other
102
103
  formats of video files when the ExtractEmbedded option is used. Although
103
104
  most of these tags are combined into the single table below, ExifTool
104
- currently reads 62 different formats of timed GPS metadata from video files.
105
+ currently reads 63 different formats of timed GPS metadata from video files.
105
106
  },
106
107
  VARS => { NO_ID => 1 },
107
108
  GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
@@ -236,7 +237,7 @@ my %insvLimit = (
236
237
  camm => [{
237
238
  Name => 'camm0',
238
239
  # (according to the spec. the first 2 bytes are reserved and should be zero,
239
- # but I have a sample where these bytes are non-zero, so allow anything here)
240
+ # but I have samples where these bytes are non-zero, so allow anything here)
240
241
  Condition => '$$valPt =~ /^..\0\0/s',
241
242
  SubDirectory => {
242
243
  TagTable => 'Image::ExifTool::QuickTime::camm0',
@@ -318,7 +319,7 @@ my %insvLimit = (
318
319
 
319
320
  # tags found in 'camm' type 0 timed metadata (ref 4)
320
321
  %Image::ExifTool::QuickTime::camm0 = (
321
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
322
+ PROCESS_PROC => \&ProcessCAMM,
322
323
  GROUPS => { 2 => 'Location' },
323
324
  FIRST_ENTRY => 0,
324
325
  NOTES => q{
@@ -336,7 +337,7 @@ my %insvLimit = (
336
337
 
337
338
  # tags found in 'camm' type 1 timed metadata (ref 4)
338
339
  %Image::ExifTool::QuickTime::camm1 = (
339
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
340
+ PROCESS_PROC => \&ProcessCAMM,
340
341
  GROUPS => { 2 => 'Camera' },
341
342
  FIRST_ENTRY => 0,
342
343
  4 => {
@@ -355,7 +356,7 @@ my %insvLimit = (
355
356
 
356
357
  # tags found in 'camm' type 2 timed metadata (ref PH, Insta360Pro)
357
358
  %Image::ExifTool::QuickTime::camm2 = (
358
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
359
+ PROCESS_PROC => \&ProcessCAMM,
359
360
  GROUPS => { 2 => 'Location' },
360
361
  FIRST_ENTRY => 0,
361
362
  4 => {
@@ -367,7 +368,7 @@ my %insvLimit = (
367
368
 
368
369
  # tags found in 'camm' type 3 timed metadata (ref PH, Insta360Pro)
369
370
  %Image::ExifTool::QuickTime::camm3 = (
370
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
371
+ PROCESS_PROC => \&ProcessCAMM,
371
372
  GROUPS => { 2 => 'Location' },
372
373
  FIRST_ENTRY => 0,
373
374
  4 => {
@@ -379,7 +380,7 @@ my %insvLimit = (
379
380
 
380
381
  # tags found in 'camm' type 4 timed metadata (ref 4)
381
382
  %Image::ExifTool::QuickTime::camm4 = (
382
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
383
+ PROCESS_PROC => \&ProcessCAMM,
383
384
  GROUPS => { 2 => 'Location' },
384
385
  FIRST_ENTRY => 0,
385
386
  4 => {
@@ -391,7 +392,7 @@ my %insvLimit = (
391
392
 
392
393
  # tags found in 'camm' type 5 timed metadata (ref 4)
393
394
  %Image::ExifTool::QuickTime::camm5 = (
394
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
395
+ PROCESS_PROC => \&ProcessCAMM,
395
396
  GROUPS => { 2 => 'Location' },
396
397
  FIRST_ENTRY => 0,
397
398
  4 => {
@@ -416,7 +417,7 @@ my %insvLimit = (
416
417
 
417
418
  # tags found in 'camm' type 6 timed metadata (ref PH/4, Insta360)
418
419
  %Image::ExifTool::QuickTime::camm6 = (
419
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
420
+ PROCESS_PROC => \&ProcessCAMM,
420
421
  GROUPS => { 2 => 'Location' },
421
422
  FIRST_ENTRY => 0,
422
423
  0x04 => {
@@ -482,7 +483,7 @@ my %insvLimit = (
482
483
 
483
484
  # tags found in 'camm' type 7 timed metadata (ref 4)
484
485
  %Image::ExifTool::QuickTime::camm7 = (
485
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
486
+ PROCESS_PROC => \&ProcessCAMM,
486
487
  GROUPS => { 2 => 'Location' },
487
488
  FIRST_ENTRY => 0,
488
489
  4 => {
@@ -1481,8 +1482,12 @@ sub ProcessFreeGPS($$$)
1481
1482
  $lon = GetFloat($dataPt, 0x30);
1482
1483
  $spd = GetFloat($dataPt, 0x34) * $knotsToKph; # (convert knots to km/h)
1483
1484
  $trk = GetFloat($dataPt, 0x38);
1484
- @acc = unpack('x60V3', $$dataPt); # (may be all zeros if not valid)
1485
- map { $_ = $_ - 4294967296 if $_ >= 0x80000000; $_ /= 256 } @acc;
1485
+ # (may be all zeros or int16u counting from 1 to 6 if not valid)
1486
+ my $tmp = substr($$dataPt, 60, 12);
1487
+ if ($tmp ne "\0\0\0\0\0\0\0\0\0\0\0\0" and $tmp ne "\x01\0\x02\0\x03\0\x04\0\x05\0\x06\0") {
1488
+ @acc = unpack('V3', $tmp);
1489
+ map { $_ = $_ - 4294967296 if $_ >= 0x80000000; $_ /= 256 } @acc;
1490
+ }
1486
1491
  SetByteOrder('MM');
1487
1492
  $debug and $et->FoundTag(GPSType => '1C');
1488
1493
 
@@ -2238,6 +2243,7 @@ sub Process_3gf($$$)
2238
2243
 
2239
2244
  #------------------------------------------------------------------------------
2240
2245
  # Process DuDuBell M1 dashcam / VSYS M6L 'gps0' atom (ref PH)
2246
+ # (Lamax S9 dual dashcam also uses 'gps0' atom, but encrypted text format)
2241
2247
  # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
2242
2248
  # Returns: 1 on success
2243
2249
  sub Process_gps0($$$)
@@ -2245,14 +2251,28 @@ sub Process_gps0($$$)
2245
2251
  my ($et, $dirInfo, $tagTbl) = @_;
2246
2252
  my $dataPt = $$dirInfo{DataPt};
2247
2253
  my $dirLen = $$dirInfo{DirLen};
2248
- my $recLen = 32; # 32-byte record length
2254
+ my ($pos, $recLen);
2249
2255
  $et->VerboseDir('gps0', undef, $dirLen);
2256
+ # check for encrypted format written by Lamax S9 dual dashcam
2257
+ # (similar to Ambarella A12, but in multiple 311-byte records)
2258
+ if ($$dataPt =~ /^.{2}\xf2\xe1\xf0\xeeTT\x98/s) {
2259
+ $recLen = 311;
2260
+ for ($pos=0; $pos+$recLen<=$dirLen; $pos+=$recLen) {
2261
+ my $dat = substr($$dataPt, $pos, $recLen);
2262
+ last unless $dat =~ /^.{2}\xf2\xe1\xf0\xeeTT\x98/s;
2263
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
2264
+ Process_text($et, \$dat, $tagTbl);
2265
+ $pos += $recLen;
2266
+ }
2267
+ delete $$et{DOC_NUM};
2268
+ return 1;
2269
+ }
2270
+ $recLen = 32; # 32-byte record length
2250
2271
  SetByteOrder('II');
2251
2272
  if ($dirLen > $recLen and not $et->Options('ExtractEmbedded')) {
2252
2273
  $dirLen = $recLen;
2253
2274
  EEWarn($et);
2254
2275
  }
2255
- my $pos;
2256
2276
  for ($pos=0; $pos+$recLen<=$dirLen; $pos+=$recLen) {
2257
2277
  $$et{DOC_NUM} = ++$$et{DOC_COUNT};
2258
2278
  # lat/long are in DDDMM.MMMM format
@@ -2773,6 +2793,34 @@ sub ProcessInsta360($;$)
2773
2793
  return 1;
2774
2794
  }
2775
2795
 
2796
+ #------------------------------------------------------------------------------
2797
+ # Process CAMM metadata (ref PH)
2798
+ # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
2799
+ # Returns: 1 on success
2800
+ sub ProcessCAMM($$$)
2801
+ {
2802
+ my ($et, $dirInfo, $tagTbl) = @_;
2803
+ my $dataPt = $$dirInfo{DataPt};
2804
+ my $pos = $$dirInfo{DirStart} || 0;
2805
+ my $end = $pos + ($$dirInfo{DirLen} || length($$dataPt) - $pos);
2806
+ # camm record size for each type, including 4-byte header
2807
+ my %size = ( 1 => 12, 2 => 16, 3 => 16, 4 => 16, 5 => 28, 6 => 60, 7 => 16 );
2808
+ my $rtnVal = 0;
2809
+ while ($pos + 4 < $end) {
2810
+ my $type = Get16u($dataPt, $pos + 2);
2811
+ my $size = $size{$type} or $et->WarnOnce("Unknown camm record type $type"), last;
2812
+ $pos + $size > $end and $et->WarnOnce("Truncated camm record $type"), last;
2813
+ my $tagTbl = GetTagTable("Image::ExifTool::QuickTime::camm$type");
2814
+ $$dirInfo{DirStart} = $pos;
2815
+ $$dirInfo{DirLen} = $size;
2816
+ $et->ProcessBinaryData($dirInfo, $tagTbl) and $rtnVal = 1;
2817
+ # not sure if this is according to specification, but I have seen multiple
2818
+ # camm records all in a single sample, so step forward to process the next one
2819
+ $pos += $size;
2820
+ }
2821
+ return $rtnVal;
2822
+ }
2823
+
2776
2824
  #------------------------------------------------------------------------------
2777
2825
  # Process Garmin GPS 'uuid' atom (ref PH)
2778
2826
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
@@ -2972,7 +3020,7 @@ information like GPS tracks from MOV, MP4 and INSV media data.
2972
3020
 
2973
3021
  =head1 AUTHOR
2974
3022
 
2975
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
3023
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
2976
3024
 
2977
3025
  This library is free software; you can redistribute it and/or modify it
2978
3026
  under the same terms as Perl itself.
@@ -641,7 +641,8 @@ numerical, and generated automatically otherwise.
641
641
  expression, a code reference or a list reference. In this
642
642
  expression, $self, $val and $tag may be used as with
643
643
  ValueConv, but if ValueConv was defined then $val is the
644
- ValueConv value instead of the Raw value. The returned value
644
+ ValueConv value instead of the Raw value. Composite tags
645
+ may also use the @val, @prt and @raw lists. The returned value
645
646
  should always be defined. Note that the print conversion is
646
647
  only done if the PrintConv option is enabled (which it is by
647
648
  default), and if the result of the ValueConv is not a scalar
@@ -2126,7 +2126,7 @@ including AVI videos, WAV audio files and WEBP images.
2126
2126
 
2127
2127
  =head1 AUTHOR
2128
2128
 
2129
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
2129
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
2130
2130
 
2131
2131
  This library is free software; you can redistribute it and/or modify it
2132
2132
  under the same terms as Perl itself.
@@ -225,7 +225,7 @@ resource files.
225
225
 
226
226
  =head1 AUTHOR
227
227
 
228
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
228
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
229
229
 
230
230
  This library is free software; you can redistribute it and/or modify it
231
231
  under the same terms as Perl itself.
@@ -366,7 +366,7 @@ information from RTF (Rich Text Format) documents.
366
366
 
367
367
  =head1 AUTHOR
368
368
 
369
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
369
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
370
370
 
371
371
  This library is free software; you can redistribute it and/or modify it
372
372
  under the same terms as Perl itself.
@@ -125,7 +125,7 @@ images are a type of high dynamic-range image.
125
125
 
126
126
  =head1 AUTHOR
127
127
 
128
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
128
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
129
129
 
130
130
  This library is free software; you can redistribute it and/or modify it
131
131
  under the same terms as Perl itself.
@@ -168,7 +168,7 @@ information from Rawzor compressed images.
168
168
 
169
169
  =head1 AUTHOR
170
170
 
171
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
171
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
172
172
 
173
173
  This library is free software; you can redistribute it and/or modify it
174
174
  under the same terms as Perl itself.
@@ -715,7 +715,7 @@ little-endian, but the Real format is big-endian.
715
715
 
716
716
  =head1 AUTHOR
717
717
 
718
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
718
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
719
719
 
720
720
  This library is free software; you can redistribute it and/or modify it
721
721
  under the same terms as Perl itself.
@@ -431,7 +431,7 @@ maker notes in images from Reconyx cameras.
431
431
 
432
432
  =head1 AUTHOR
433
433
 
434
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
434
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
435
435
 
436
436
  This library is free software; you can redistribute it and/or modify it
437
437
  under the same terms as Perl itself.
@@ -303,7 +303,7 @@ from Redcode R3D version 1 and 2 video files.
303
303
 
304
304
  =head1 AUTHOR
305
305
 
306
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
306
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
307
307
 
308
308
  This library is free software; you can redistribute it and/or modify it
309
309
  under the same terms as Perl itself.
@@ -1143,7 +1143,7 @@ interpret Ricoh maker notes EXIF meta information.
1143
1143
 
1144
1144
  =head1 AUTHOR
1145
1145
 
1146
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
1146
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
1147
1147
 
1148
1148
  This library is free software; you can redistribute it and/or modify it
1149
1149
  under the same terms as Perl itself.
@@ -1261,8 +1261,10 @@ my %formatMinMax = (
1261
1261
  },
1262
1262
  # 0x0b41-name - seen 'SingeShot_DepthMap_1' (Yes, "Singe") (SM-N975X front camera)
1263
1263
  '0x0b41' => { Name => 'SingleShotDepthMap', Binary => 1 },
1264
+ # 0x0ba1-name - seen 'Original_Path_Hash_Key', 'PhotoEditor_Re_Edit_Data'
1264
1265
  # 0xa050-name - seen 'Jpeg360_2D_Info' (Samsung Gear 360)
1265
1266
  # 0xa050 - seen 'Jpeg3602D' (Samsung Gear 360)
1267
+ # 0x0c81-name - seen 'Watermark_Info'
1266
1268
  );
1267
1269
 
1268
1270
  # DualShot Extra Info (ref PH)
@@ -1720,7 +1722,7 @@ Samsung maker notes in EXIF information.
1720
1722
 
1721
1723
  =head1 AUTHOR
1722
1724
 
1723
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
1725
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
1724
1726
 
1725
1727
  This library is free software; you can redistribute it and/or modify it
1726
1728
  under the same terms as Perl itself.
@@ -419,7 +419,7 @@ Sanyo maker notes in EXIF information.
419
419
 
420
420
  =head1 AUTHOR
421
421
 
422
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
422
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
423
423
 
424
424
  This library is free software; you can redistribute it and/or modify it
425
425
  under the same terms as Perl itself.
@@ -128,7 +128,7 @@ metadata from the JPEG APP4 SCALADO segment.
128
128
 
129
129
  =head1 AUTHOR
130
130
 
131
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
131
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
132
132
 
133
133
  This library is free software; you can redistribute it and/or modify it
134
134
  under the same terms as Perl itself.
@@ -632,7 +632,7 @@ limited to the range 1970 to 2038 on 32-bit systems.
632
632
 
633
633
  =head1 AUTHOR
634
634
 
635
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
635
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
636
636
 
637
637
  This library is free software; you can redistribute it and/or modify it
638
638
  under the same terms as Perl itself.
@@ -343,7 +343,7 @@ name prefix.
343
343
 
344
344
  =head1 AUTHOR
345
345
 
346
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
346
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
347
347
 
348
348
  This library is free software; you can redistribute it and/or modify it
349
349
  under the same terms as Perl itself.
@@ -863,7 +863,7 @@ Sigma and Foveon maker notes in EXIF information.
863
863
 
864
864
  =head1 AUTHOR
865
865
 
866
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
866
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
867
867
 
868
868
  This library is free software; you can redistribute it and/or modify it
869
869
  under the same terms as Perl itself.
@@ -674,7 +674,7 @@ Sigma and Foveon X3F images.
674
674
 
675
675
  =head1 AUTHOR
676
676
 
677
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
677
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
678
678
 
679
679
  This library is free software; you can redistribute it and/or modify it
680
680
  under the same terms as Perl itself.
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
34
34
  use Image::ExifTool::Exif;
35
35
  use Image::ExifTool::Minolta;
36
36
 
37
- $VERSION = '3.55';
37
+ $VERSION = '3.56';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -10191,10 +10191,10 @@ my %isoSetting2010 = (
10191
10191
  PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
10192
10192
  },
10193
10193
  0x8001 => { Name => 'Sony_rtmd_0x8001', Format => 'int16u', %hidUnk },
10194
- 0x8004 => { Name => 'Sony_rtmd_0x8004', Format => 'int16u', %hidUnk },
10195
- 0x8005 => { Name => 'Sony_rtmd_0x8005', Format => 'int16u', %hidUnk },
10196
- 0x800a => { Name => 'Sony_rtmd_0x800a', Format => 'int16u', %hidUnk },
10197
- 0x800b => { Name => 'Sony_rtmd_0x800b', Format => 'int16u', %hidUnk },
10194
+ 0x8004 => { Name => 'Sony_rtmd_0x8004', Format => 'int16u', %hidUnk }, # (FocalLength35efl?, forum14315)
10195
+ 0x8005 => { Name => 'Sony_rtmd_0x8005', Format => 'int16u', %hidUnk }, # (FocalLength?, forum14315)
10196
+ 0x800a => { Name => 'Sony_rtmd_0x800a', Format => 'int16u', %hidUnk }, # (FocusRingPosition?, forum14315)
10197
+ 0x800b => { Name => 'Sony_rtmd_0x800b', Format => 'int16u', %hidUnk }, # (ZoomRingPosition?, forum14315)
10198
10198
  # 0x8100 - 16 bytes starting with 0x060e2b340401
10199
10199
  0x8100 => { Name => 'Sony_rtmd_0x8100', Format => 'int8u', %hidUnk },
10200
10200
  0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1
@@ -10364,7 +10364,7 @@ my %isoSetting2010 = (
10364
10364
  return 'inf' if $val >= 255;
10365
10365
  return (2**($val/16-5) + 1) * $val[1] / 1000;
10366
10366
  },
10367
- PrintConv => '$val eq "inf" ? $val : sprintf("%.2f m",$val)',
10367
+ PrintConv => '$val eq "inf" ? $val : sprintf("%.4g m", $val)',
10368
10368
  },
10369
10369
  GPSDateTime => {
10370
10370
  Description => 'GPS Date/Time',
@@ -11317,7 +11317,7 @@ Minolta.
11317
11317
 
11318
11318
  =head1 AUTHOR
11319
11319
 
11320
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
11320
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
11321
11321
 
11322
11322
  This library is free software; you can redistribute it and/or modify it
11323
11323
  under the same terms as Perl itself.
@@ -379,7 +379,7 @@ write Sony Image Data Converter version 3.0 metadata in ARW images.
379
379
 
380
380
  =head1 AUTHOR
381
381
 
382
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
382
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
383
383
 
384
384
  This library is free software; you can redistribute it and/or modify it
385
385
  under the same terms as Perl itself.
@@ -174,7 +174,7 @@ information.
174
174
 
175
175
  =head1 AUTHOR
176
176
 
177
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
177
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
178
178
 
179
179
  This library is free software; you can redistribute it and/or modify it
180
180
  under the same terms as Perl itself.