You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The most widely-used Perl photo metadata library — running on PerlOnJava **unmodified**.
134
-
135
-
- <spanclass="metric">239 Perl source files</span> · <spanclass="metric">296,000 lines of code</span>
136
-
- Largest modules exceed **10,000 lines** (Nikon.pm, Sony.pm, Canon.pm)
137
-
- Subroutines over **1,000 lines** (SetNewValue, WriteInfo, ExtractInfo)
138
-
- <spanclass="metric">600 tests</span> in 113 files — **all pass**
139
-
140
-
**Why this matters:** Large methods exceed the JVM's 64KB bytecode limit — the compiler automatically falls back to the Internal VM. ExifTool proves PerlOnJava handles production-scale Perl reliably, not just toy examples.
141
-
142
-
Note:
143
-
Image::ExifTool 13.44 by Phil Harvey. Modules like TagLookup.pm (13,840 LOC), Nikon.pm (12,843 LOC), and Writer.pl (5,849 LOC) stress-test every part of the compilation pipeline. The automatic dual-backend fallback is transparent — ExifTool doesn't know which backend runs each method.
The most widely-used Perl photo metadata library — running on PerlOnJava **unmodified**.
188
+
189
+
- <spanclass="metric">239 Perl source files</span> · <spanclass="metric">296,000 lines of code</span>
190
+
- Largest modules exceed **10,000 lines** (Nikon.pm, Sony.pm, Canon.pm)
191
+
- Subroutines over **1,000 lines** (SetNewValue, WriteInfo, ExtractInfo)
192
+
- <spanclass="metric">600 tests</span> in 113 files — **all pass**
193
+
194
+
**Why this matters:** Large methods exceed the JVM's 64KB bytecode limit — the compiler automatically falls back to the Internal VM.
195
+
196
+
Note:
197
+
Image::ExifTool 13.44 by Phil Harvey. Modules like TagLookup.pm (13,840 LOC), Nikon.pm (12,843 LOC), and Writer.pl (5,849 LOC) stress-test every part of the compilation pipeline. The automatic dual-backend fallback is transparent — ExifTool doesn't know which backend runs each method.
198
+
199
+
---
200
+
198
201
## How It Works: AST
199
202
200
203
**Abstract Syntax Tree** — tree representation of source code
@@ -292,14 +295,24 @@ Register-based, ~300 opcodes — much more compact.
292
295
293
296
---
294
297
298
+
## Key Takeaways
299
+
300
+
-**One JAR, zero dependencies** — drop-in Perl runtime for the JVM
Debugger uses Internal VM (forced with -d). DEBUG opcodes inserted at each statement. DebugHooks handles breakpoints, command parsing, and eval in current scope. PERL5DB supported for custom debuggers.
658
-
659
-
---
660
-
661
-
## Current Limitations
662
-
663
-
**JVM-incompatible:**
664
-
-`fork` — not available on JVM
665
-
-`DESTROY` — JVM uses non-deterministic GC
666
-
- Threading — not yet implemented
667
-
668
-
**Partially implemented:**
669
-
- Some regex features, taint checks
670
-
671
-
Note:
672
-
Workarounds: jnr-posix for native access, Java threading APIs, file auto-close at exit. XS modules use Java equivalents.
0 commit comments