Come faccio a rido operatore backticks built-in di Perl?
-
01-10-2019 - |
Domanda
Mi piacerebbe unit test un programma Perl di mine che utilizza backticks. C'è un modo per prendere in giro i backticks in modo che avrebbero fatto qualcosa di diverso dalla esecuzione del comando esterno?
Un altro mostra interrogativi che mi servono , ma in Ruby. Purtroppo, non posso scegliere di utilizzare Rubino per questo progetto, né voglio evitare le backticks.
Soluzione
Puoi * finta il built-in readpipe
funzione. Perl chiamerà la funzione finta quando incontra un'espressione backticks o qx
.
BEGIN {
*CORE::GLOBAL::readpipe = \&mock_readpipe
};
sub mock_readpipe {
wantarray ? ("foo\n") : "foo\n";
}
print readpipe("ls -R");
print `ls -R`;
print qx(ls -R);
$ perl mock-readpipe.pl
foo
foo
foo
* - se si dispone di perl versione 5.8.9 o successiva.
Altri suggerimenti
Invece di usare apici inversi, è possibile utilizzare capture
da IPC :: Sistema: :. semplice , e poi scrivere una versione finta di cattura () nella tua unit test
# application
use IPC::System::Simple qw(capture);
my $stuff = capture("some command");
# test script
{
package IPC::System::Simple;
sub capture
{
# do something else; perhaps a call to ok()
}
}
# ... rest of unit test here