in reply to Re^2: running a backticks command behaves different in command line and browser
in thread running a backticks command behaves different in command line and browser

LD_LIBRARY_PATH specifies directories that the dynamic linker searches first. It is used when testing XS extensions to pick up the newly built extension rather than whatever is installed on the system.

haukex beat me to it, but I recommend simply putting delete $ENV{LD_LIBRARY_PATH} if $ENV{LD_LIBRARY_PATH} =~ m{/lampp/}; somewhere near the top of your script to ensure that any special values your httpd installation is using will not affect your script's subprocesses.

I also strongly advise against using shell commands when they can be avoided, particularly in Perl scripts exposed to the Web. As an example, your solution would have made your program vulnerable to ShellShock, even though you do not actually need a shell anywhere in this application.

How much output does this command produce? You may want to read the output incrementally rather than collecting it all. If so, also look into IPC::Open3 and possibly IO::Pty and Expect.

  • Comment on Re^3: running a backticks command behaves different in command line and browser
  • Download Code

Replies are listed 'Best First'.
Re^4: running a backticks command behaves different in command line and browser
by haukex (Archbishop) on Aug 11, 2019 at 20:32 UTC
    look into IPC::Open3 and possibly IO::Pty

    IMHO those are relatively low-level. Personally, I'd recommend IPC::Run, as it supports interactive communication with the subprocesses it runs and can be used in an Expect-like manner, plus a few other advanced features. I showed one example in the node I linked to.

      Most of the time, I consider "relatively low-level" to be a feature. I have found that the more layers I use, the more likely that something will go wrong somewhere.

      I usually prefer the lowest level at which I can write reasonably concise code. No need to pull in Expect (any of them) if simple pipes are enough. Similarly, if the needs are very simple, no need to pull in Perl when Expect (the Tcl variant) will do.

        I usually prefer the lowest level at which I can write reasonably concise code.

        Sure, I understand that - if I have doubts or issues with a module I'm using and there's no other module available, and I can go a level lower, I'll often do that (e.g. Lower-Level Serial Port Access on *NIX). On the other hand, it also usually means a steeper learning curve and potentially more caveats, edge cases, and portability issues one has to know about and has to cover. Anyway, my response was also meant in the context of the thread, i.e. adding more information for the wisdom seeker. I've had good experiences with IPC::Run so far.