> For the complete documentation index, see [llms.txt](https://sugoi.gitbook.io/lanraragi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sugoi.gitbook.io/lanraragi/plugin-docs/code-examples.md).

# Code Examples

This section contains a few bits of code for things you might want to do with Plugins.

## **Write messages to the Plugin Log**

```perl
# Import the LRR logging module
use LANraragi::Utils::Logging qw(get_plugin_logger);
# Use the logger to output status - they'll be passed to a specialized logfile and written to STDOUT.
my $logger = get_plugin_logger();

$plugin->debug("This message will only show if LRR is in Debug Mode")
$plugin->info("You know me the fighting freak Knuckles and we're at Pumpkin Hill");
$plugin->warn("You ready?");
$plugin->error("Oh no");
```

The logger is a preconfigured [Mojo::Log](http://mojolicious.org/perldoc/Mojo/Log) object.

## **Make requests to a remote WebService**

[Mojo::UserAgent](http://mojolicious.org/perldoc/Mojo/UserAgent) is a full-featured HTTP client coming with LRR you can use.

```perl
use Mojo::UserAgent;

my $ua = $lrr_info->{user_agent};

#Get HTML from a simple GET request
$ua->get("http://example.com")->result->body;

#Make a POST request and get the JSON result
my $rep = $ua->post(
        "https://jsonplaceholder.typicode.com/" => json => {
            stage  => "Meteor Herd",
            location   => [ [ "space", "colony" ] ],
            emeralds => 3
        }
    )->result;

#JSON decoded to a perl object
my $jsonresponse = $rep->json;

#JSON decoded to a string
my $textrep      = $rep->body;
```

## **Read values in the LRR Database**

```perl
my $redis = LANraragi::Model::Config->get_redis;

my $value = $redis->get("key");
```

This uses the excellent [Perl binding library](http://search.cpan.org/~dams/Redis-1.991/lib/Redis.pm) for Redis.

## **Extract files from the archive being examined**

If you're running 0.5.2 or later:

```perl
use LANraragi::Utils::Archive qw(is_file_in_archive extract_file_from_archive);

# Check if info.json is in the archive located at $file and get its precise path
my $info_path = is_file_in_archive($file, "info.json");
if ($info_path) {

        #Extract info.json
        my $filepath = extract_file_from_archive($file, $info_path);

        #Do whatever you need with the extracted file
        open( my $fh, '<:encoding(UTF-8)', $filepath )
          or die "Could not open $filepath!\n";

        while ( my $row = <$fh> ) {
            #...
        }

        #Delete it
        unlink $filepath;
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://sugoi.gitbook.io/lanraragi/plugin-docs/code-examples.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
