COBOL использует уровни 88
для реализации именованных значений, именованных групп значений и именованных диапазонов значений.
Например:
01 COLOUR PIC X(10).
88 IS-PRIMARY-COLOUR VALUE 'Red', 'Blue', 'Yellow'.
...
MOVE 'Blue' TO COLOUR
IF IS-PRIMARY-COLOUR
DISPLAY 'This is a primary colour'
END-IF
Тесты на дальность охватываются следующим образом:
01 SOME-NUMBER PIC S9(4) BINARY.
88 IS-LESS-THAN-ZERO VALUE -9999 THRU -1.
88 IS-ZERO VALUE ZERO.
88 IS-GREATER-THAN-ZERO VALUE 1 THRU 9999.
...
MOVE +358 TO SOME-NUMBER
EVALUATE TRUE
WHEN IS-LESS-THAN-ZERO
DISPLAY 'Negative Number'
WHEN IS-ZERO
DISPLAY 'Zero'
WHEN IS-GREATER-THAN-ZERO
DISPLAY 'Positive Number'
WHEN OTHER
DISPLAY 'How the heck did this happen!'
END-EVALUATE
Я думаю, все это произошло, потому что COBOL должен был подражать английскому в некоторой степени.
Я не использую Ruby, но общая идея состоит в том, чтобы отправить HTTP-запрос HEAD на сервер, который, в свою очередь, вернет ответ 301 (перемещен навсегда) с Location
], который содержит URI.
HEAD /5b2su2 HTTP/1.1
Host: tinyurl.com
Accept: */*
ОТВЕТ:
HTTP/1.1 301 Moved Permanently
Location: http://stackoverflow.com
Content-type: text/html
Date: Sat, 23 May 2009 18:58:24 GMT
Server: TinyURL/1.6
Это намного быстрее, чем открытие фактического URL, и вы действительно не хотите получать перенаправленный URL. Он также хорошо работает со службой tinyurl.
Изучите любые HTTP или curl API в ruby. Это должно быть довольно просто.
Вы можете использовать httpclient rubygem для получения заголовков
#!/usr/bin/env ruby
require 'rubygems'
require 'httpclient'
client = HTTPClient.new
result = client.head(ARGV[0])
puts result.header['Location']
Есть отличная оболочка для битового API в Python, доступного здесь: http://code.google.com/p/python-bitly/
Значит, для Ruby должно быть что-то подобное.