$url = 'http://www.mydomain.in/abc/';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_host);
Perl идет -t
оператор теста файла, который говорит Вам, если конкретный дескриптор файла открыт для TTY. Так, необходимо смочь сделать это:
if ( -t STDIN and not @ARGV ) {
# We're talking to a terminal, but have no command line arguments.
# Complain loudly.
}
else {
# We're either reading from a file or pipe, or we have arguments in
# @ARGV to process.
}
Быстрый тест показывает это хорошо работающее в Windows с Perl 5.10.0 и Linux с Perl 5.8.8, таким образом, это должно быть портативно через наиболее распространенные среды Perl.
Поскольку другие упомянули, select
не был бы надежный выбор, поскольку могут быть времена, когда Вы читаете из процесса, но тот процесс не начал писать все же.
Всего наилучшего,
Paul
use POSIX 'isatty';
if ( ! @ARGV && isatty(*STDIN) ) {
die "usage: ...";
}
См.: http://www.opengroup.org/onlinepubs/009695399/functions/isatty.html
Обратите внимание, что выбор не был бы большим количеством справки так или иначе, так как это привело бы к ложным результатам, если бы переданная по каналу информация еще не была готова. Пример:
seq 100000|grep 99999|perl -we'$rin="";vec($rin,fileno(STDIN),1)=1;print 0+select($rin,"","",.01)'