Prefer `IO.popen` over `IO.foreach` with `|`

This commit is contained in:
Nobuyoshi Nakada 2024-02-01 21:20:42 +09:00
Родитель f22bec79fe
Коммит c0629a055a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 3582D74E1FEE4465
1 изменённых файлов: 9 добавлений и 2 удалений

Просмотреть файл

@ -1,12 +1,13 @@
#!/usr/bin/ruby
require_relative 'lib/colorize'
require 'shellwords'
until ARGV.empty?
case ARGV[0]
when /\A SYMBOL_PREFIX=(.*)/x
SYMBOL_PREFIX = $1
when /\A NM=(.*)/x # may be multiple words
NM = $1
NM = $1.shellsplit
when /\A PLATFORM=(.+)?/x
platform = $1
when /\A SOEXT=(.+)?/x
@ -69,7 +70,13 @@ if soext
so = soext =~ ARGV.first
end
end
IO.foreach("|#{NM} #{ARGV.join(' ')}") do |line|
Pipe = Struct.new(:command) do
def open(&block) IO.popen(command, &block) end
def each(&block) open {|f| f.each(&block)} end
end
Pipe.new(NM + ARGV).each do |line|
line.chomp!
next so = nil if line.empty?
if so.nil? and line.chomp!(":")