Perl6: làm thế nào để tôi đọc các tham số hỗn hợp từ dòng lệnh?


9

Tôi đang xóa bài đăng vì tôi không được hỏi ý kiến ​​về kiểm duyệt / chỉnh sửa.



Xin chào @Todd. Tôi có thể thấy bạn rất buồn vì các chỉnh sửa của người khác, có lẽ vì bạn không quen với cách SO hoạt động liên quan đến các chỉnh sửa , ví dụ như chỉnh sửa 'cảm ơn' . Tuy nhiên, bản chỉnh sửa câu hỏi của bạn gây khó chịu cho người khác vì nó làm mất thời gian / công sức của những người đã trả lời bạn và những người khác sử dụng SO. Hãy xem xét cho tôi phước lành của bạn để khôi phục câu hỏi của bạn như nó được .
raiph

Câu trả lời:


9

Dưới đây là một ví dụ sử dụng Getopt :: Long :

use v6;
use Getopt::Long;

my %opt = help => False, 'r=s' => "", 'q=s' => "", 'w=s' => "";
my %options = get-options(%opt).hash;
say %options;
say @*ARGS;

Chạy ví dụ:

$ p.p6  -w xyz -q def -r abc hello
{help => False, q => def, r => abc, w => xyz}
[hello]

@Todd Tất cả các đối số được xử lý như các tùy chọn được xóa @*ARGSbởi get-options(). Vì vậy, các đối số không phải là tùy chọn được để lại @*ARGSsau đó. Xem câu trả lời cập nhật
Håkon Hægland

Nó đặt helpthành giá trị mặc định là 0. Có lẽ sẽ tốt hơn nếu sử dụng boolean: help => Falsevì tùy chọn trợ giúp thường được sử dụng để hiển thị thông báo trợ giúp. Tôi đã chỉnh sửa câu trả lời như vậy helplà một boolean.
Håkon Hægland

8

Sử dụng MAINphụ :

#!/usr/bin/env raku

use v6;

sub MAIN(:$these ="These", :$are="Are", :$params="Params") {
    say "$these $are $params";
}

Bạn có thể nhập các tham số này theo bất kỳ thứ tự nào:

./command-line.p6 --are=well --these=those
those well Params

Và cũng sẽ bắt bất kỳ tham số bổ sung nào, hiển thị cho bạn các tham số thực tế:

./command-line.p6 --are=well --these=those --not=this_one
Usage:
  ./command-line.p6 [--these=<Any>] [--are=<Any>] [--params=<Any>]

Nếu bạn chỉ quan tâm đến các tham số với một dấu gạch ngang duy nhất, bạn sẽ cần GetOpt :: Long như được chỉ định bởi Hakon

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.