The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
@mixin border-image($images) {
  -webkit-border-image: _border-add-prefix($images, webkit);
     -moz-border-image: _border-add-prefix($images, moz);
       -o-border-image: _border-add-prefix($images, o);
          border-image: _border-add-prefix($images);
}

@function _border-add-prefix($images, $vendor: false) {
  $border-image: null;
  $images-type:  type-of(nth($images, 1));
  $first-var:    nth(nth($images, 1), 1);          // Get type of Gradient (Linear || radial)

  // If input is a gradient
  @if $images-type == string {
    @if ($first-var == "linear") or ($first-var == "radial") {
      $gradient-type: nth($images, 1);           // Get type of gradient (linear || radial)
      $gradient-pos:  nth($images, 2);           // Get gradient position
      $gradient-args: nth($images, 3);           // Get actual gradient (red, blue)
      $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos);
      $border-image:  _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
    }
    // If input is a URL
    @else {
      $border-image: $images;
    }
  }
  // If input is gradient or url + additional args
  @else if $images-type == list {
    $type: type-of(nth($images, 1));           // Get type of variable - List or String

    // If variable is a list - Gradient
    @if $type == list {
      $gradient: nth($images, 1);
      $gradient-type: nth($gradient, 1);           // Get type of gradient (linear || radial)
      $gradient-pos:  nth($gradient, 2);           // Get gradient position
      $gradient-args: nth($gradient, 3);           // Get actual gradient (red, blue)
      $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos);
      $border-image:  _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);

      @for $i from 2 through length($images) {
        $border-image: append($border-image, nth($images, $i));
      }
    }
  }
  @return $border-image;
}

//Examples:
// @include border-image(url("image.png"));
// @include border-image(url("image.png") 20 stretch);
// @include border-image(linear-gradient(45deg, orange, yellow));
// @include border-image(linear-gradient(45deg, orange, yellow) stretch);
// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round);
// @include border-image(radial-gradient(top, cover, orange, yellow, orange));