I could have sworn I saw a reference to a document or set of documents listing the modules packaged with each Perl release, but I cannot find it. Anybody remember this? (I could instead be remembering that people were talking about creating such a document...)
Why do I need such a thing? In the recent Workflow release I added functionality to create inline conditions. So instead of determining whether you can access an action within a state by executing a known method on an object:
# in workflow.xml <workflow>... <state name="foo">... <action name="bar">... <condition name="checkTime" /> </action> </state> </workflow> # in condition.xml <conditions> <condition name="checkTime" class="MyApp::Condition::CheckTime" /> </conditions>
You can now inline the condition using Perl:
# in workflow.xml <workflow>... <state name="foo">... <action name="bar">... <condition test="$context->{time} < time" /> </action> </state> </workflow> # nothing needed in condition.xml!
Useful. But I didn't want to expose a gaping security hole by using string eval to execute what's in 'test'. (Don't know why that's bad? I could set 'test' to "system( 'rm -rf /' )"...) So I looked into Safe. It seemed to work pretty well, although passing a workflow or context object into the safe compartment was a headache so I just normalized everything to a hashref.
From the online docs you can tell that Safe is packaged with Perl. But how far back did that go? I didn't want to leave out users of 5.6.x unless absolutely necessary. So after googling around a while I couldn't find a resource with all the modules listed per release, so I just went to the source, grabbed 5.004 and unpacked it. Sure enough, there's ext/Opcode/Safe.pm -- if it's in 5.004, that's good enough for me.