One solution would be to "source ~/.keychain/hostname-sh" in the shell before calling the perl script. That should work.
Ok, can't do this because end-users will not like the extra step.
Another one would be to source it before calling scp:
system ("source ~/.keychain/hostname-sh; /usr/bin/scp /tmp/filename server1:/tmp/filename");
Yep, this is what I did. I have the source ~/.keychain/hostname-sh in every command now. This seems the simplest solution for the time being.
The third one (if you don't use a shell to invoke the perl and you don't want to change every "system" call) would be to parse the file inside perl and to modify the %ENV variable to include these two variables. What you want is the equivalent of:
$ENV{SSH_AUTH_SOCK} = "/tmp/ssh-XXn47DUn/agent.16721"; $ENV{SSH_AGENT_PID} = "16722";
But of course you'd have to parse the file to get the real values. Anyway, if you set that in the begining of your code, every "system" you use will have these two variables exported as well.
Yes, and for this simple one-off script probably too much trouble to go parsing the .keychain file. Its easier to just source it before each bash command.
Thanks for all your help, Filipe.