我正在尝试使用Ruby中的Perl命令
的Perl
perl -MIO::Socket::INET -e 'until(new IO::Socket::INET("localhost:80")) { print "Waiting for network..\n"; sleep 1}'
我如何在红宝石中做同样的事情?
我试过了:
require 'socket'
until !( TCPSocket.new("localhost",80).close ) do
puts "Wait..."
sleep 1
end
我正在寻找Ruby中的一个班轮。
答案 0 :(得分:3)
主要区别在于,如果无法建立IO,Ruby将引发错误,因此您需要解决错误情况。它稍微改变了流程,但仍然非常可行:
loop { break if (TCPSocket.open("localhost",80) rescue nil); puts "Wait...."; sleep 1 }
从其他答案可以看出,可以从Perl版本进行更直接的转换。只需使用Ruby表达式(TCPSocket.open("localhost",80) rescue nil)
替换Perl的new IO::Socket::INET("localhost:80")
,以便Ruby的引发错误行为更好地匹配Perl的在无法创建对象时返回undef 。
答案 1 :(得分:3)
这是类似的:
require 'socket'
(puts "Waiting..."; sleep 1) until (TCPSocket.open("localhost",3000) rescue nil)
完整命令行:
ruby -r socket -e '(puts "Waiting..."; sleep 1) until (TCPSocket.open("localhost",3000) rescue nil)'