{"action":"created","comment":{"url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/comments/51364472","id":51364472,"diff_hunk":"@@ -9,26 +10,88 @@ use Safe;\n zci answer_type => \"regexp\";\n zci is_cached   => 1;\n \n-triggers query_lc => qr/^regex[p]? [\\/\\\\](.+?)[\\/\\\\] (.+)$/i;\n+triggers start => 'regex', 'match', 'regexp';\n+triggers any   => '=~';\n \n-handle query => sub {\n-    my $regexp = $1;\n-    my $str    = $2;\n+sub compile_re {\n+    my ($re, $modifiers, $compiler) = @_;\n+    $compiler->($re, $modifiers);\n+}\n+\n+# Using $& causes a performance penalty, apparently.\n+sub get_full_match {\n+    return substr(shift, $-[0], $+[0] - $-[0]);\n+}\n \n-    my $compiler = Safe->new->reval(q{ sub { qr/$_[0]/ } });\n+# Ensures that the correct numbered matches are being produced.\n+sub real_number_matches {\n+    my ($one, @numbered) = @_;\n+    # If the first match isn't defined then neither are the others!\n+    return defined $one ? @numbered : ();\n+}\n \n-    sub compile_re {\n-        my ( $re, $compiler ) = @_;\n-        $compiler->($re);\n+sub get_match_record {\n+    my ($regexp, $str, $modifiers) = @_;\n+    my $compiler = Safe->new->reval(q { sub { qr/(?$_[1])$_[0]/ } }) or return;\n+    BEGIN {\n+        $SIG{'__WARN__'} = sub {\n+            warn $_[0] if $_[0] !~ /Use of uninitialized value in regexp compilation/i;\n+        }\n     }\n \n-    my @results = ();\n-    eval {\n-\t\t@results = $str =~ compile_re($regexp, $compiler);\n+    my @numbered = $str =~ compile_re($regexp, $modifiers, $compiler) or return;\n+    @numbered = real_number_matches($1, @numbered);\n+    my $matches = {};\n+    $matches->{'Full Match'} = get_full_match($str);\n+    foreach my $match (keys %+) {\n+\t\t    $matches->{\"Named Capture <$match>\"} = $+{$match};\n     };\n+    my $i = 1;\n+    foreach my $match (@numbered) {\n+        $matches->{\"Subpattern Match $i\"} = $match;\n+        $i++;\n+    };\n+    return $matches;\n+}\n+\n+my $regex_re = qr/\\/(?<regex>.+)\\/(?<modifiers>i)?/;\n+\n+sub extract_regex_text {\n+    my $query = shift;\n+    $query =~ /^(?<text>.+) =~ $regex_re$/;\n+    ($+{regex} && $+{text}) || ($query =~ /^(?:match\\s*regexp?|regexp?)\\s*$regex_re\\s+(?<text>.+)$/);\n+    return unless defined $+{regex} && defined $+{text};\n+    my $modifiers = $+{modifiers} // '';\n+    return ($+{regex}, $+{text}, $modifiers);\n+}\n+\n+sub get_match_keys { return sort (keys %{$_[0]}) }\n+\n+handle query => sub {\n+    my $query = $_;\n+    my ($regexp, $str, $modifiers) = extract_regex_text($query) or return;\n+    my $matches = get_match_record($regexp, $str, $modifiers) or return;\n+    my @key_order = get_match_keys($matches);\n+    return unless $matches->{'Full Match'} ne '';\n \n-    return join( ' | ', @results ), heading => 'Regexp Result' if @results;\n-    return;\n+    return $matches,\n+        structured_answer => {\n+            id   => 'regexp',\n+            name => 'Answer',\n+            data => {\n+                title       => \"Regular Expression Match\",\n+                subtitle    => \"Match regular expression /$regexp/$modifiers on $str\",","path":"lib/DDG/Goodie/Regexp.pm","position":95,"original_position":95,"commit_id":"cadd1b01542a15fc4b9b9157d71482234a5ba3c8","original_commit_id":"cadd1b01542a15fc4b9b9157d71482234a5ba3c8","user":{"login":"GuiltyDolphin","id":8598426,"avatar_url":"https://avatars.githubusercontent.com/u/8598426?v=3","gravatar_id":"","url":"https://api.github.com/users/GuiltyDolphin","html_url":"https://github.com/GuiltyDolphin","followers_url":"https://api.github.com/users/GuiltyDolphin/followers","following_url":"https://api.github.com/users/GuiltyDolphin/following{/other_user}","gists_url":"https://api.github.com/users/GuiltyDolphin/gists{/gist_id}","starred_url":"https://api.github.com/users/GuiltyDolphin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GuiltyDolphin/subscriptions","organizations_url":"https://api.github.com/users/GuiltyDolphin/orgs","repos_url":"https://api.github.com/users/GuiltyDolphin/repos","events_url":"https://api.github.com/users/GuiltyDolphin/events{/privacy}","received_events_url":"https://api.github.com/users/GuiltyDolphin/received_events","type":"User","site_admin":false},"body":"@moollaza I'm not getting that - are you sure that's not the old version?","created_at":"2016-01-31T18:04:12Z","updated_at":"2016-01-31T18:04:12Z","html_url":"https://github.com/duckduckgo/zeroclickinfo-goodies/pull/1998#discussion_r51364472","pull_request_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/1998","_links":{"self":{"href":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/comments/51364472"},"html":{"href":"https://github.com/duckduckgo/zeroclickinfo-goodies/pull/1998#discussion_r51364472"},"pull_request":{"href":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/1998"}}},"pull_request":{"url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/1998","id":54908173,"html_url":"https://github.com/duckduckgo/zeroclickinfo-goodies/pull/1998","diff_url":"https://github.com/duckduckgo/zeroclickinfo-goodies/pull/1998.diff","patch_url":"https://github.com/duckduckgo/zeroclickinfo-goodies/pull/1998.patch","issue_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/issues/1998","number":1998,"state":"closed","locked":false,"title":"Regexp: Improvements!","user":{"login":"GuiltyDolphin","id":8598426,"avatar_url":"https://avatars.githubusercontent.com/u/8598426?v=3","gravatar_id":"","url":"https://api.github.com/users/GuiltyDolphin","html_url":"https://github.com/GuiltyDolphin","followers_url":"https://api.github.com/users/GuiltyDolphin/followers","following_url":"https://api.github.com/users/GuiltyDolphin/following{/other_user}","gists_url":"https://api.github.com/users/GuiltyDolphin/gists{/gist_id}","starred_url":"https://api.github.com/users/GuiltyDolphin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GuiltyDolphin/subscriptions","organizations_url":"https://api.github.com/users/GuiltyDolphin/orgs","repos_url":"https://api.github.com/users/GuiltyDolphin/repos","events_url":"https://api.github.com/users/GuiltyDolphin/events{/privacy}","received_events_url":"https://api.github.com/users/GuiltyDolphin/received_events","type":"User","site_admin":false},"body":"Which of these do you prefer?\r\n\r\n![screenshot from 2016-01-02 16 08 13](https://cloud.githubusercontent.com/assets/8598426/12075062/27a350a4-b16b-11e5-8357-05cbec136a9e.png)\r\n\r\n**OR**\r\n\r\n![screenshot from 2016-01-02 16 10 16](https://cloud.githubusercontent.com/assets/8598426/12075067/60f293e2-b16b-11e5-9720-dfaad6aa7008.png)\r\n\r\n\r\nYeah, I thought so. The first one is clearly superior ;)\r\n\r\n## To-do\r\n\r\n- [x] Support Perl-style matching (`foo =~ /foo/`).\r\n- [x] Improve ordering of results (full match first, numbered matches in order etc...).\r\n- [ ] Ensure that the Goodie won't try and compute really complex regexes (maybe time limit or just detect complexity?). \r\n- [x] Support basic modifiers (ignore case, for example).\r\n- [x] Expand key width a bit - named captures are wrapping too early.\r\n\r\n### Bugs\r\n\r\n- [x] Matches like `regexp /foo/ foo` will allocate `1` to the first numbered match.\r\n- [x] Uppercases the named captures (i.e, `Named Capture <x>` becomes `Named Capture <X>`).\r\n\r\n---\r\n[IA Page](https://duck.co/ia/view/regexp)","created_at":"2016-01-02T16:11:39Z","updated_at":"2016-01-31T18:04:12Z","closed_at":"2016-01-31T18:01:18Z","merged_at":"2016-01-31T18:01:18Z","merge_commit_sha":"5f347a72d8ce54652bf894323bca360b0b3b5851","assignee":{"login":"moollaza","id":873785,"avatar_url":"https://avatars.githubusercontent.com/u/873785?v=3","gravatar_id":"","url":"https://api.github.com/users/moollaza","html_url":"https://github.com/moollaza","followers_url":"https://api.github.com/users/moollaza/followers","following_url":"https://api.github.com/users/moollaza/following{/other_user}","gists_url":"https://api.github.com/users/moollaza/gists{/gist_id}","starred_url":"https://api.github.com/users/moollaza/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/moollaza/subscriptions","organizations_url":"https://api.github.com/users/moollaza/orgs","repos_url":"https://api.github.com/users/moollaza/repos","events_url":"https://api.github.com/users/moollaza/events{/privacy}","received_events_url":"https://api.github.com/users/moollaza/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/1998/commits","review_comments_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/1998/comments","review_comment_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/comments{/number}","comments_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/issues/1998/comments","statuses_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/statuses/cadd1b01542a15fc4b9b9157d71482234a5ba3c8","head":{"label":"GuiltyDolphin:regexp-improve","ref":"regexp-improve","sha":"cadd1b01542a15fc4b9b9157d71482234a5ba3c8","user":{"login":"GuiltyDolphin","id":8598426,"avatar_url":"https://avatars.githubusercontent.com/u/8598426?v=3","gravatar_id":"","url":"https://api.github.com/users/GuiltyDolphin","html_url":"https://github.com/GuiltyDolphin","followers_url":"https://api.github.com/users/GuiltyDolphin/followers","following_url":"https://api.github.com/users/GuiltyDolphin/following{/other_user}","gists_url":"https://api.github.com/users/GuiltyDolphin/gists{/gist_id}","starred_url":"https://api.github.com/users/GuiltyDolphin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GuiltyDolphin/subscriptions","organizations_url":"https://api.github.com/users/GuiltyDolphin/orgs","repos_url":"https://api.github.com/users/GuiltyDolphin/repos","events_url":"https://api.github.com/users/GuiltyDolphin/events{/privacy}","received_events_url":"https://api.github.com/users/GuiltyDolphin/received_events","type":"User","site_admin":false},"repo":{"id":47498140,"name":"zeroclickinfo-goodies","full_name":"GuiltyDolphin/zeroclickinfo-goodies","owner":{"login":"GuiltyDolphin","id":8598426,"avatar_url":"https://avatars.githubusercontent.com/u/8598426?v=3","gravatar_id":"","url":"https://api.github.com/users/GuiltyDolphin","html_url":"https://github.com/GuiltyDolphin","followers_url":"https://api.github.com/users/GuiltyDolphin/followers","following_url":"https://api.github.com/users/GuiltyDolphin/following{/other_user}","gists_url":"https://api.github.com/users/GuiltyDolphin/gists{/gist_id}","starred_url":"https://api.github.com/users/GuiltyDolphin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GuiltyDolphin/subscriptions","organizations_url":"https://api.github.com/users/GuiltyDolphin/orgs","repos_url":"https://api.github.com/users/GuiltyDolphin/repos","events_url":"https://api.github.com/users/GuiltyDolphin/events{/privacy}","received_events_url":"https://api.github.com/users/GuiltyDolphin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/GuiltyDolphin/zeroclickinfo-goodies","description":"DuckDuckGo instant answer plugins based on Perl functions","fork":true,"url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies","forks_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/forks","keys_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/teams","hooks_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/hooks","issue_events_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/issues/events{/number}","events_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/events","assignees_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/assignees{/user}","branches_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/branches{/branch}","tags_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/tags","blobs_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/git/refs{/sha}","trees_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/statuses/{sha}","languages_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/languages","stargazers_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/stargazers","contributors_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/contributors","subscribers_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/subscribers","subscription_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/subscription","commits_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/commits{/sha}","git_commits_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/git/commits{/sha}","comments_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/comments{/number}","issue_comment_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/issues/comments{/number}","contents_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/contents/{+path}","compare_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/merges","archive_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/downloads","issues_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/issues{/number}","pulls_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/pulls{/number}","milestones_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/milestones{/number}","notifications_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/labels{/name}","releases_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/releases{/id}","deployments_url":"https://api.github.com/repos/GuiltyDolphin/zeroclickinfo-goodies/deployments","created_at":"2015-12-06T13:39:42Z","updated_at":"2016-01-13T13:56:10Z","pushed_at":"2016-01-31T17:46:17Z","git_url":"git://github.com/GuiltyDolphin/zeroclickinfo-goodies.git","ssh_url":"git@github.com:GuiltyDolphin/zeroclickinfo-goodies.git","clone_url":"https://github.com/GuiltyDolphin/zeroclickinfo-goodies.git","svn_url":"https://github.com/GuiltyDolphin/zeroclickinfo-goodies","homepage":"http://duckduckhack.com/","size":12834,"stargazers_count":0,"watchers_count":0,"language":"Perl","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"duckduckgo:master","ref":"master","sha":"5f57ddbd85fdb1755560b3df2134c40a4c6656f1","user":{"login":"duckduckgo","id":342708,"avatar_url":"https://avatars.githubusercontent.com/u/342708?v=3","gravatar_id":"","url":"https://api.github.com/users/duckduckgo","html_url":"https://github.com/duckduckgo","followers_url":"https://api.github.com/users/duckduckgo/followers","following_url":"https://api.github.com/users/duckduckgo/following{/other_user}","gists_url":"https://api.github.com/users/duckduckgo/gists{/gist_id}","starred_url":"https://api.github.com/users/duckduckgo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duckduckgo/subscriptions","organizations_url":"https://api.github.com/users/duckduckgo/orgs","repos_url":"https://api.github.com/users/duckduckgo/repos","events_url":"https://api.github.com/users/duckduckgo/events{/privacy}","received_events_url":"https://api.github.com/users/duckduckgo/received_events","type":"Organization","site_admin":false},"repo":{"id":2164979,"name":"zeroclickinfo-goodies","full_name":"duckduckgo/zeroclickinfo-goodies","owner":{"login":"duckduckgo","id":342708,"avatar_url":"https://avatars.githubusercontent.com/u/342708?v=3","gravatar_id":"","url":"https://api.github.com/users/duckduckgo","html_url":"https://github.com/duckduckgo","followers_url":"https://api.github.com/users/duckduckgo/followers","following_url":"https://api.github.com/users/duckduckgo/following{/other_user}","gists_url":"https://api.github.com/users/duckduckgo/gists{/gist_id}","starred_url":"https://api.github.com/users/duckduckgo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duckduckgo/subscriptions","organizations_url":"https://api.github.com/users/duckduckgo/orgs","repos_url":"https://api.github.com/users/duckduckgo/repos","events_url":"https://api.github.com/users/duckduckgo/events{/privacy}","received_events_url":"https://api.github.com/users/duckduckgo/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/duckduckgo/zeroclickinfo-goodies","description":"DuckDuckGo Instant Answers based on Perl & JavaScript","fork":false,"url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies","forks_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/forks","keys_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/keys{/key_id}","collaborators_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/teams","hooks_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/hooks","issue_events_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/issues/events{/number}","events_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/events","assignees_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/assignees{/user}","branches_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/branches{/branch}","tags_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/tags","blobs_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/git/refs{/sha}","trees_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/git/trees{/sha}","statuses_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/statuses/{sha}","languages_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/languages","stargazers_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/stargazers","contributors_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/contributors","subscribers_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/subscribers","subscription_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/subscription","commits_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/commits{/sha}","git_commits_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/git/commits{/sha}","comments_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/comments{/number}","issue_comment_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/issues/comments{/number}","contents_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/contents/{+path}","compare_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/compare/{base}...{head}","merges_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/merges","archive_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/downloads","issues_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/issues{/number}","pulls_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls{/number}","milestones_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/milestones{/number}","notifications_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/labels{/name}","releases_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/releases{/id}","deployments_url":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/deployments","created_at":"2011-08-06T13:26:05Z","updated_at":"2016-01-31T17:33:06Z","pushed_at":"2016-01-31T18:01:49Z","git_url":"git://github.com/duckduckgo/zeroclickinfo-goodies.git","ssh_url":"git@github.com:duckduckgo/zeroclickinfo-goodies.git","clone_url":"https://github.com/duckduckgo/zeroclickinfo-goodies.git","svn_url":"https://github.com/duckduckgo/zeroclickinfo-goodies","homepage":"http://duckduckhack.com/","size":21206,"stargazers_count":397,"watchers_count":397,"language":"Perl","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1437,"mirror_url":null,"open_issues_count":229,"forks":1437,"open_issues":229,"watchers":397,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/1998"},"html":{"href":"https://github.com/duckduckgo/zeroclickinfo-goodies/pull/1998"},"issue":{"href":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/issues/1998"},"comments":{"href":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/issues/1998/comments"},"review_comments":{"href":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/1998/comments"},"review_comment":{"href":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/pulls/1998/commits"},"statuses":{"href":"https://api.github.com/repos/duckduckgo/zeroclickinfo-goodies/statuses/cadd1b01542a15fc4b9b9157d71482234a5ba3c8"}}}}